Soru Önce Entity Framework 4.1 kodunda aynı tablonun işaret ettiği çoklu yabancı anahtarlar


Aşağıdaki DB ilişkisi için Entity Framework 4.1 kod ilk modelini yazmaya çalışıyorum.

İşte ilişkinin bir görüntüsü.enter image description here

dbo. [Şirketler] Şirket Türleri olarak Satıcı veya Borçlu olabilir.

dbo. [SellerDebtors] bir Satıcı Şirketinin bir Borçlu Şirket ile olan bağlantısını tanımlar.

Yazdığım kod, orijinal EF 4.0 POCO model koduma dayanıyor. Bu ben ile geldim - Bu kod çalışmıyor.

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

}

Şu anda, bunu bir hata olarak alıyorum:

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

İdeal olarak, ilişkilerin ismini muhafaza etmek istiyorum.

Sanırım bazı öznitelikleri ayarlamam gerekiyor ama ne yapacağımı bilmiyorum.


17
2018-05-16 10:21


Menşei


Olası kopya Varlık Çerçeve Kodu İlk - aynı tablonun iki Yabancı Anahtarları - Michael Freidgeim


Cevaplar:


EF, 2 sınıfınızdaki navigasyon özelliklerinin bir araya ait olduğunu ve 2 yerine (diğer tarafta bir son olmaksızın) 4 ilişki oluşturduğunu (her iki tarafta da uçları ile) belirleyememektedir. Bu sorun, aynı türden birden fazla gezinme özelliğiniz olduğunda her zaman oluşur (Company Sizin durumunuzda) aynı sınıfta. Bunu şu şekilde düzeltmeyi deneyebilirsiniz:

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(...)] ilişkinin diğer ucundaki gezinme özelliğini tanımlar ve EF'e hangi çift gezinme özelliğinin bir ilişkide bir araya ait olduğunu açıkça bildirir.


18
2018-05-16 16:43





Bu blog, Fluent API yapılandırmalarını kullanan örnektir.

CodeFirst Entity Framework ve Fluent API kullanarak aynı tablodaki birden çok yabancı anahtar

modelBuilder.Entity<Branch>().HasOptional(b => b.PrimaryContact)         
            .WithMany(a => a.PrimaryContactFor).HasForeignKey(b=>b.PrimaryContactID);

3
2018-06-08 04:10



Bunu gönderdiğiniz için çok sevindim. Bugün bu Fluent API örneğine ihtiyacım vardı. - Brandon
IMHO en iyi cevap. Akıcı API, güneşli bir gün kadar açıktır. - alex440