2016-12-06 97 views
0

我想获得多个“单位”有一组分配的“UnitInfo”,但首先使用代码时,我得到EF以下消息:多0..1关系到同一个表实体框架代码首先

在模型生成期间检测到一个或多个验证错误: Unit_UnitInfo_Source::多元性在关系“Unit_UnitInfo”中的角色“Unit_UnitInfo_Source”中无效。由于依赖角色属性不是关键属性,所以从属角色的多重性的上限必须是''。 SubUnit_UnitInfo_Source:多重不是在关系中的作用“SubUnit_UnitInfo_Source“SubUnit_UnitInfo”有效。因为“依赖角色”属性不是关键属性,所以“从属角色”的多重性上限必须为“”。

我使用的类看起来是这样的:

public class Unit 
{ 
    public int UnitId { get; set; } 
    public string Name { get; set; } 
    public List<SubUnit> SubUnits { get; set; } 

    [ForeignKey("UnitInfoId")] 
    public UnitInfo UnitInfo { get; set; } 
} 

public class SubUnit 
{ 
    public int SubUnitId { get; set; } 
    public string Name { get; set; } 

    [ForeignKey("UnitInfoId")] 
    public UnitInfo UnitInfo { get; set; } 
} 

public class UnitInfo 
{ 
    public int UnitInfoId { get; set; } 
    public string Function { get; set; } 
    public string Location { get; set; } 
} 

我敢肯定,这是一个简单的错误,我只是不能想出办法来的。

我在做什么错?

+0

你可以自由地记住我的解决方案的答案,如果它帮助解决你的问题,还是不要犹豫,问它更多的问题。 –

回答

0

[ForeignKey()]属性应该指代的外键,或在同一类的导航属性。因此,UnitInfoId应该是您指定导航属性和[ForeignKey()]属性的类的成员。

导航性能应该是为了让EF为懒加载创建代理类的虚拟。如果你不使用流利的api,你应该为主键指定[Key]属性。此外,参考集合应声明为虚拟ICollection成员。你所需要的架构可以声明如下:

public class Unit 
{ 
    public Unit() 
    { 
     SubUnits = new HashSet<SubUnit>(); 
    } 

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UnitId { get; set; } 
    public string Name { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<SubUnit> SubUnits { get; set; } 

    public int UnitInfoId { get; set; } 

    [ForeignKey("UnitInfoId")] 
    public virtual UnitInfo UnitInfo { get; set; } 
} 

public class SubUnit 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int SubUnitId { get; set; } 
    public int UnitId { get; set; } 
    public string Name { get; set; } 

    [ForeignKey("UnitId")] 
    public virtual Unit ParentUnit { get; set; } 

    public int UnitInfoId { get; set; } 
    [ForeignKey("UnitInfoId")] 
    public UnitInfo UnitInfo { get; set; } 
} 

public class UnitInfo 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UnitInfoId { get; set; } 
    public string Function { get; set; } 
    public string Location { get; set; } 
} 

不过,我会建议使用继承,因为单位和亚单位共享相同的结构。你可以阅读更多关于EF代码第一HERE

相关问题