【问题标题】:Does Entity Framework 5 support unique constraints?Entity Framework 5 是否支持唯一约束?
【发布时间】:2012-08-02 21:59:05
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

虽然 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 相同。

【讨论】:

    【解决方案2】:

    如上所述,它不受支持,但就目前而言,当我以编程方式(代码优先)创建数据库时,我在 init db 部分使用以下代码:

    MainDBContext mainDBContext = new MainDBContext();
    
    mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
    
    mainDBContext.Dispose();
    

    【讨论】:

      【解决方案3】:

      嗯,我一直在寻找解决方案,最后我找到了。 当您在代码中生成迁移时,您可以创建唯一键

       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 级别上做,所以我认为它可以解决你的问题。

      【讨论】:

        【解决方案4】:

        我找到了一种解决方法,以实现对实体属性的唯一约束。是真的 和直观。请参考我的另一篇文章:

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

        【讨论】:

          【解决方案5】:

          不,它没有。过去曾计划在 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

          【讨论】:

            猜你喜欢
            • 2019-04-19
            • 1970-01-01
            • 2015-01-06
            • 1970-01-01
            • 2018-02-28
            • 1970-01-01
            • 2016-07-12
            • 2013-10-14
            • 1970-01-01
            相关资源
            最近更新 更多