EF Code First验证Unique复合键

时间:2012-06-29 14:05:48

标签: entity-framework entity-framework-4 ef-code-first data-annotations

我有一个包含Id列作为主键的表。还需要在另外两列(实际上是FK)上强制实现唯一性。在Sql Server中,我可以在这两列上创建一个UniqueKey。

我可以在EF端做什么,以便它可以验证这两个字段的唯一性?

2 个答案:

答案 0 :(得分:2)

EF不支持唯一键,因此最佳解决方法是在数据库中使用唯一键并在保存期间捕获异常。如果在数据库创建期间需要EF来创建唯一键,则可以use custom initializer

如果你想在应用程序中进行一些验证,你需要执行一些查询并检查这些数据是否还不存在,但是你仍然需要使用以前的建议来捕获异常,因为另一个线程/进程/用户可以在查询和保存更改之间创建此类数据。

答案 1 :(得分:-1)

在您的POCO类中,标记需要作为Key唯一的每列。如:

public MyPocoClass {
   [Key, Column(Order = 0)]
   public int Id { get; set; }

   [Key, Column(Order = 1)]
   public int Col2name { get; set; }


   [Key, Column(Order = 2)]
   public int Col3name { get; set; }
}

设置列顺序非常有用,这样您的主键列就会一起显示在sql db中。

如果列是其他Entity Framework代码的外键,则首先将该属性命名为tablename_tableId,EF将完成其余的操作。即

public anotherClass {
       public int Id { get; set; }

       public int MyPocoClass_Id { get; set; } //this is a foreign key

    }