2011-10-31 58 views
0

我使用ASP.NET MVC 3与实体框架4代码的第一种方法,每次我尝试使用模型上的键属性指定复合键时,我会得到这个错误:实体框架复合键代码首先导致模型验证错误

System.Data.Edm.EdmAssociationConstraint: : Number of Properties in the Dependent and Principal Role in a relationship constraint must be exactly identical.

我使用的列属性来区分主键像这样的顺序:

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事件添加逻辑,但如果可能的话,我宁愿使用模型上的关键属性。

+0

看起来您正在使用关联属性(GameId?)之一。 Game有其他实体有什么关联? –

+0

我正在构建一个游戏数据库,其中包含来自Xbox Live,PSN和Steam的游戏。游戏实体是这些网络游戏中每一个游戏的超级类别。此外,我将使用游戏实体来表示不特定于在线网络以及SNES或NES等较旧游戏机的游戏。 –

回答

0

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

+0

我需要每个实体的名称是唯一的,所以它需要成为实体键的一部分。我会尝试给所有实体添加名称。谢谢你的提示。 –

+0

感谢您的帮助。我决定不在名称中包含实体关键字。在添加具有相同名称的新实体之前,我需要实际检查是否存在具有名称的实体。我会用你的答案来回答我的问题。 –