Entity Framework 5是否支持唯一约束?

时间:2012-08-05 20:07:39

标签: unique-constraint .net-4.5 entity-framework-5

想知道Entity Framework 5是否支持对实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?

5 个答案:

答案 0 :(得分:33)

不,它没有。过去有计划在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-i-e-candidate-key-support

...因为显然它现在甚至没有出现在EF 6.0的路线图中:

http://entityframework.codeplex.com/wikipage?title=Roadmap

答案 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)

我找到了解决办法,以实现对实体属性的唯一约束。是真的 而直观。请参阅我的其他帖子:

https://stackoverflow.com/a/16496291/1873113