2011-05-21 126 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