2011-05-21 127 views
0

我有經典的數據庫樹映射到實體框架實體的問題。實體框架4.1樹映射

這裏是我的分貝:

CREATE TABLE intranet_organization_units 
(
[OrganizationUnitId] INT IDENTITY PRIMARY KEY, 
[ParentOrganizationUnitId] INT NULL, 
[Name] NVARCHAR(50) NOT NULL 
) 

實體:

public class OrganizationUnit 
{ 
    public int OrganizationUnitId { get; set; } 
    public string Name { get; set; } 
    public int? ParentOrganizationUnitId { get; set; } 

    public virtual OrganizationUnit ParentOrganizationUnit { get; set; } 
    public virtual ICollection<OrganizationUnit> ChildrenUnits { get; set; } 
} 

終於映射:

public class OrganizationUnitMapper : EntityTypeConfiguration<OrganizationUnit> 
    { 
     public OrganizationUnitMapper() 
     { 
      ToTable("intranet_organization_units"); 
      Property(x => x.Name).HasColumnName("Name").IsRequired(); 


      HasMany(x => x.ChildrenUnits).WithOptional().HasForeignKey(x => x.OrganizationUnitId); 
      HasOptional(x => x.ParentOrganizationUnit).WithMany().HasForeignKey(x => x.ParentOrganizationUnitId); 

     } 
    } 

當我運行應用程序時,我得到這個異常:

一個或多個validat模型生成過程中檢測到錯誤的離子:

System.Data.Edm.EdmAssociationEnd: 多重不作用 'OrganizationUnit_ChildrenUnits_Target' 在關係 'OrganizationUnit_ChildrenUnits' 有效。 因爲依賴角色是指 的關鍵屬性,所以依賴角色 的多重性的上限必須是「1」。

那麼問題在哪裏?由於

回答

4

使用此:

public class OrganizationUnitMapper : EntityTypeConfiguration<OrganizationUnit> 
{ 
    public OrganizationUnitMapper() 
    { 
     ToTable("intranet_organization_units"); 
     Property(x => x.Name).HasColumnName("Name").IsRequired(); 

     this.HasOptional(x => x.ParentOrganizationUnit) 
      .WithMany(y => y.ChildrenUnits) 
      .HasForeignKey(x => x.ParentOrganizationUnitId); 
    } 
} 

當定義此關聯映射你說:

  • 組織單位具有可選的父
  • 家長可以有多個孩子
  • 而且孩子使用屬性外鍵
+0

完美的作品。非常感謝幫助:) – Mennion 2011-05-22 02:24:21