我有一个包含 Id 列作为主键的表。还需要在其他两个列上强制唯一性,这两个列实际上是 FK。在 Sql Server 中,我可以在这两列上创建一个 UniqueKey。
我可以在 EF 端做什么,以便它可以验证这两个字段的唯一性?
我有一个包含 Id 列作为主键的表。还需要在其他两个列上强制唯一性,这两个列实际上是 FK。在 Sql Server 中,我可以在这两列上创建一个 UniqueKey。
我可以在 EF 端做什么,以便它可以验证这两个字段的唯一性?
EF 不支持唯一键,因此您最好的解决方法是在数据库中使用唯一键并在保存期间捕获异常。如果您需要 EF 在创建数据库期间创建唯一键,您可以使用自定义初始化程序。
如果您想在应用程序中进行一些验证,您将需要执行一些查询并检查这些数据是否尚不存在,但您仍然需要使用前一个通知来捕获异常,因为另一个线程/进程/用户可以创建这样的查询和保存更改之间的数据。
在您的 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 中。
如果这些列是其他实体框架代码第一类的外键,则只需将该属性命名为 tablename_tableId,其余的将由 EF 完成。IE
public anotherClass {
public int Id { get; set; }
public int MyPocoClass_Id { get; set; } //this is a foreign key
}