想知道Entity Framework 5是否支持对实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?
答案 0 :(得分:33)
不,它没有。过去有计划在EF 5.0中包含一个独特的约束功能:
http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx
但你可以看到帖子顶部有更新:
更新:此功能已被推迟,不会包含在内 实体框架5.
您可以对该功能进行投票,以提高其实施的优先级......
...因为显然它现在甚至没有出现在EF 6.0的路线图中:
答案 1 :(得分:4)
我正在寻找解决方案,最后我找到了它。 当您在代码中生成迁移时,您可以创建唯一键
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级别上进行验证,所以我认为它可以解决你的问题。
答案 2 :(得分:4)
虽然EF(版本6.0在撰写本文时)仍然不支持独特的约束,但Code First方法有一些解决方法可以获得所需的行为。请参阅attribute-based solution,作为类似问题的答案。适用于EF 5.0 +。
编辑:
支持从EF 6.1唯一索引开始:
[Index(IsUnique = true)]
public string EmailAddress { get; set; }
它们与唯一约束for most practical purposes相同。
答案 3 :(得分:2)
如上所述,它不受支持,但是现在当我以编程方式创建数据库时(代码优先)我在init db部分使用以下代码:
MainDBContext mainDBContext = new MainDBContext();
mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
mainDBContext.Dispose();
答案 4 :(得分:0)
我找到了解决办法,以实现对实体属性的唯一约束。是真的 而直观。请参阅我的其他帖子: