EF Code 添加字段唯一性校验

本文介绍了在软件开发中确保数据唯一性的三种方法:通过自定义属性进行唯一性验证、扩展数据库并使用SQL语句创建唯一索引以及利用实体框架的Index特性实现唯一约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用唯一约束的三种方式:

方式1 自定义唯一约束

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class UniqueAttribute : ValidationAttribute
{
   public override Boolean IsValid(Object value)
    {
        //校验数据库是否存在当前Key
        return true;
    }
}

View Code

在Model类中使用

public class Email
 {
    [Key]
    public int EmailID { get; set; }
    public int PersonId { get; set; }
    [Unique]
    [Required]
    [MaxLength(100)]
    public string EmailAddress { get; set; }
    public virtual bool IsDefault { get; set; }
    public virtual Boolean IsApprovedForLogin { get; set; }
    public virtual String ConfirmationToken { get; set; }
    [ForeignKey("PersonId")]
    public virtual Person Person { get; set; }
}

方式2 扩展DataBase

SetInitializer 使用Sql语句添加

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
  protected override void Seed(MyContext context)
  {
    context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IX_Category_Title ON Categories (Title)");
  }
}

在DbContext中使用

Database.SetInitializer(new MyInitializer());

方式3 使用Index特性

public class Email
 {
    [Key]
    public int EmailID { get; set; }
    public int PersonId { get; set; }
    [Index("EmailAddress_Index", IsUnique = true)]
    [Required]
    [MaxLength(100)]
    public string EmailAddress { get; set; }
    public virtual bool IsDefault { get; set; }
    public virtual Boolean IsApprovedForLogin { get; set; }
    public virtual String ConfirmationToken { get; set; }
    [ForeignKey("PersonId")]
    public virtual Person Person { get; set; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值