Подтвердить что ты не робот

Несколько внешних ключей, указывающих на одну и ту же таблицу в коде Entity Framework 4.1, сначала

Я застрял в попытке написать первую модель кода Entity Framework 4.1 для следующих отношений DB.

Вот визуальная связь. enter image description here

dbo. [Компании] могут иметь как Продавца, так и Должника как типы компаний.

dbo. [ПродавецDebtors] определяет соединение, которое компания-продавец имеет с компанией-должником.

Код, который я написал, основан на моем исходном коде модели EF 4.0 POCO. Это то, что я придумал - этот код не работает.

public class SellerDebtor
{
    public int SellerDebtorId { get; set; }
    public int DebtorCompanyId { get; set; }
    public int SellerCompanyId { get; set; }

    public Company DebtorCompany { get; set; }
    public Company SellerCompany { get; set; }

    public ICollection<SellerDebtorInfo> SellerDebtorInfos { get; set; }
    public ICollection<SellerDebtorFile> SellerDebtorFiles { get; set; }    
}


public class Company
{
    public int CompanyId { get; set; }
    public string CompanyType { get; set; }
    public string Name { get; set; }

    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<CompanyInfo> CompanyInfos { get; set; }
    public virtual ICollection<CompanyFile> CompanyFiles { get; set; }

    public virtual ICollection<SellerDebtor> SellerDebtorDebtorCompanies { get; set; }
    public virtual ICollection<SellerDebtor> SellerDebtorSellerCompanies { get; set; }

}

В настоящий момент я получаю это как ошибку:

System.Data.SqlClient.SqlException: Invalid column name 'DebtorCompany_CompanyId'.
Invalid column name 'SellerCompany_CompanyId'.
Invalid column name 'Company_CompanyId'.
Invalid column name 'Company_CompanyId1'.

В идеале я хотел бы поддерживать именование отношений.

Я предполагаю, что мне нужно установить некоторые атрибуты, но я не уверен, что устанавливать.

4b9b3361

Ответ 1

EF не может определить по соглашению, какие свойства навигации на ваших 2 классах принадлежат друг другу и создает 4 отношения (без конца с другой стороны) вместо 2 (с концами с обеих сторон). Эта проблема возникает всегда, когда у вас есть несколько свойств навигации одного и того же типа (Company в вашем случае) в том же классе. Вы можете попытаться исправить это следующим образом:

public class SellerDebtor
{
    public int SellerDebtorId { get; set; }
    [ForeignKey("DebtorCompany")]
    public int DebtorCompanyId { get; set; }
    [ForeignKey("SellerCompany")]
    public int SellerCompanyId { get; set; }

    [InverseProperty("SellerDebtorDebtorCompanies")]
    public Company DebtorCompany { get; set; }
    [InverseProperty("SellerDebtorSellerCompanies")]
    public Company SellerCompany { get; set; }

    public ICollection<SellerDebtorInfo> SellerDebtorInfos { get; set; }
    public ICollection<SellerDebtorFile> SellerDebtorFiles { get; set; }    
}

[InverseProperty(...)] определяет свойство навигации на другом конце отношения и явно указывает EF, какие пары свойств навигации принадлежат друг другу в отношении.