【问题标题】:Entity Framework Composite Keys code first cause errors on model validation实体框架复合键代码首先导致模型验证错误
【发布时间】:2011-10-31 19:27:08
【问题描述】:

我将 ASP.NET MVC 3 与 Entity Framework 4 代码优先方法一起使用,每次我尝试使用模型上的 key 属性指定复合键时,都会收到此错误:

System.Data.Edm.EdmAssociationConstraint: : 中的属性数 关系约束中的 Dependent 和 Principal Role 必须是 完全一样。

我使用 column 属性来区分主键的顺序,如下所示:

 public class Game
    {
        [Key, Column(Order=0)]
        public Guid GameId { get; set; }
        [Key, Column(Order=1)]
        public string Name { get; set; }
        public string Description { get; set; }
        public Game()
        {
            this.GameId = Guid.NewGuid();
        }
    }

我想知道是否有另一种创建复合键的方法,或者是否有办法停止出现此错误?我知道可以为 OnModelBuild 事件添加逻辑,但如果可能的话,我宁愿使用模型上的关键属性。

【问题讨论】:

  • 看起来您正在使用关联的关键属性之一(GameId?)。 Game 与其他实体有什么关联?
  • 我正在构建一个游戏数据库,其中包含来自 Xbox Live、PSN 和 Steam 的游戏。 Game 实体是每个网络游戏的超类。此外,我将使用 Game 实体来表示不特定于在线网络和旧游戏机(例如 SNES 或 NES)的游戏。

标签: c# asp.net-mvc-3 entity-framework-4 model composite-key


【解决方案1】:

尝试从实体键中排除属性名称(我会推荐)。或者,如果您确实需要将其作为键的一部分,请在所有实体中使用它。

【讨论】:

  • 我需要每个实体的名称是唯一的,因此它需要是实体键的一部分。我会尝试将名称添加到所有实体。感谢您的提示。
  • 感谢您的帮助。我决定不在实体键中包含名称。在添加具有相同名称的新实体之前,我需要实际检查是否存在具有该名称的实体。我会用您的回答将我的问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多