想知道 Entity Framework 5 是否支持实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?
5 回答
不,它没有。过去曾计划在 EF 5.0 中包含一个独特的约束功能:
http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx
但是您可以看到帖子顶部有更新:
更新:此功能已被推迟,不会包含在 Entity Framework 5 中。
您可以对该功能进行投票,以提高其实现的优先级......
...因为显然它目前甚至不在 EF 6.0 的路线图上:
虽然 EF(撰写本文时为 6.0 版)仍然不支持开箱即用的唯一约束,但 Code First 方法有一些变通方法来获得所需的行为。请参阅基于属性的解决方案,作为类似问题的答案。适用于 EF 5.0+。
编辑:
从 EF 6.1 开始支持唯一索引:
[Index(IsUnique = true)]
public string EmailAddress { get; set; }
对于大多数实际用途,它们与唯一约束相同。
好吧,我一直在寻找解决方案,最后我找到了。当您在代码中生成迁移时,您可以创建唯一键
CreateTable(
"dbo.TaBLE",
c => new
{
Id = c.Int(nullable: false, identity: true),
Date = c.DateTime(nullable: false),
Meter_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.Index(t => new {t.Meter_Id, t.Date}, true);
插入之前的验证您可以在 BLL 级别上进行,所以我认为它可以解决您的问题。
如上所述,它不受支持,但就目前而言,当我以编程方式创建数据库时(代码优先),我在 init db 部分使用以下代码:
MainDBContext mainDBContext = new MainDBContext();
mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
mainDBContext.Dispose();
我找到了一种解决方法,以实现对实体属性的唯一约束。它真的很直观。请参考我的另一篇文章: