想知道如果实体框架5支持的实体属性唯一约束? 如果是这样,我怎么可以指定一个属性应该是唯一的?
Answer 1:
不,没有。 有在过去的计划包括在EF 5.0中的唯一约束功能:
http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx
但是你可以看到有关于该职位的顶部的更新:
更新:此功能已被推迟,将不会被包括在实体框架5。
您可以在功能投票可能提高其获取与实现优先级...
http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-ie-candidate-key-support
......因为很明显它甚至不是在目前的路线图EF 6.0:
http://entityframework.codeplex.com/wikipage?title=Roadmap
Answer 2:
嗯,我一直在寻找解决方案,终于让我找到它。 当你生成代码迁移,你可以创造出独特的键
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水平做的,所以我认为它可以解决你的问题。
Answer 3:
而唯一约束仍没有EF(6.0版本写这篇文章)支持开箱即用的,也有一些变通办法代码优先的方法来获得所需的行为。 看到一个基于属性的解决方案 ,作为回答类似的问题。 工程与EF 5.0+。
编辑:
与EF 6.1唯一索引起的支持 :
[Index(IsUnique = true)]
public string EmailAddress { get; set; }
他们是一样的唯一约束最实用的目的 。
Answer 4:
正如上面提到的,不支持,但至于现在,当我创建编程数据库(代码第一次)我用在init DB部分下面的代码:
MainDBContext mainDBContext = new MainDBContext();
mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
mainDBContext.Dispose();
Answer 5:
我为了实现对实体属性唯一约束找到一个变通。 这真是直观。 请参考我的另一篇:
https://stackoverflow.com/a/16496291/1873113