Отображение дерева Entity Framework 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);

        }
    }

Когда я запускаю приложение, я получаю это исключение:

Во время создания модели были обнаружены одна или несколько ошибок проверки:

System.Data.Edm.EdmAssociationEnd: : Множественность недопустима в роли 'OrganizationUnit_ChildrenUnits_Target' в отношении 'OrganizationUnit_ChildrenUnits'. Поскольку зависимая роль относится к ключевым свойствам, верхняя граница кратности зависимой роли должна быть равна «1».

Так где проблема? Спасибо


person Mennion    schedule 21.05.2011    source источник


Ответы (1)


Использовать это:

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);
    }
}

При определении этого отображения ассоциации вы говорите:

  • Организационное подразделение имеет необязательный родительский элемент
  • Родитель может иметь несколько детей
  • И свойство дочернего использования для внешнего ключа
person Ladislav Mrnka    schedule 21.05.2011