我有一个包含Id列作为主键的表。还需要在另外两列(实际上是FK)上强制实现唯一性。在Sql Server中,我可以在这两列上创建一个UniqueKey。
我可以在EF端做什么,以便它可以验证这两个字段的唯一性?
答案 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
}