Entity Framework 4.1 отображение дерева - PullRequest
0 голосов
/ 21 мая 2011

У меня проблема с отображением классического дерева БД на сущность структуры сущности.

Вот моя база данных:

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�.

Так в чем же проблема?Спасибо

1 Ответ

4 голосов
/ 22 мая 2011

Используйте это:

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

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

  • Подразделение имеет опционального родителя
  • Родитель может иметь несколько детей
  • И свойство ребенка использовать для внешнего ключа
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...