【发布时间】:2012-08-02 21:59:05
【问题描述】:
想知道 Entity Framework 5 是否支持实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?
【问题讨论】:
-
没有。但它是since Entity Framework 6.1。
标签: unique-constraint .net-4.5 entity-framework-5
想知道 Entity Framework 5 是否支持实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?
【问题讨论】:
标签: unique-constraint .net-4.5 entity-framework-5
虽然 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 相同。
【讨论】:
如上所述,它不受支持,但就目前而言,当我以编程方式(代码优先)创建数据库时,我在 init db 部分使用以下代码:
MainDBContext mainDBContext = new MainDBContext();
mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
mainDBContext.Dispose();
【讨论】:
嗯,我一直在寻找解决方案,最后我找到了。 当您在代码中生成迁移时,您可以创建唯一键
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 级别上做,所以我认为它可以解决你的问题。
【讨论】:
我找到了一种解决方法,以实现对实体属性的唯一约束。是真的 和直观。请参考我的另一篇文章:
【讨论】:
不,它没有。过去曾计划在 EF 5.0 中包含一个独特的约束功能:
http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx
但是你可以看到帖子顶部有更新:
更新:此功能已被推迟,不会包含在 实体框架 5.
您可以对该功能进行投票,以提高其实现的优先级...
...因为显然它目前甚至不在 EF 6.0 的路线图上:
【讨论】: