Учитывая следующую грубую кодовую схему, цель будет казаться довольно простой. Номер Invoice
может быть от или до Company
, а коллекция Invoices
должна содержать все счета-фактуры, независимо от того, какая из них.2 Внешние ключи, 1 свойство навигации, чтобы вытащить оба из них
public class Company
{
public int Id { get; set; }
public virtual ICollection<Invoice> Invoices { get; set; }
}
public class Invoice
{
public int Id { get; set; }
public int FromCompanyId { get; set; }
public int ToCompanyId { get; set; }
public virtual Company FromCompany { get; set; }
public virtual Company ToCompany { get; set; }
}
Вы отметите в миграции, что третья Company_Id
генерируется по понятным причинам для поддержки Invoices
навигации свойства, как EF только появляется для поддержки 1 Nav Prop -> 1 расположение FK.
Мой вопрос заключается в том, является ли это возможно иметь Invoices
свойство содержат как, или если я должен сопоставить их по отдельности (то есть. IC<Inv> InvoicesFrom
, IC<Inv> InvoicesTo
) и создать коллекцию на стороне клиента, чтобы иметь как вручную.
Я попытался:
Использование
InverseProperty
на обоихFromCompany
иToCompany
, который путает EF, поскольку он не может определить основной конец отношений.[ForeignKey(nameof(FromCompanyId)), InverseProperty(nameof(Company.Invoices))] public virtual Company FromCompany { get; set; } [ForeignKey(nameof(ToCompanyId)), InverseProperty(nameof(Company.Invoices))] public virtual Company ToCompany { get; set; }
Использование свободно API для их отображения, но он принимает во внимание только второй, который имеет смысл с точки зрения кода.
modelBuilder.Entity<Company>() .HasMany(m => m.Invoices) .WithRequired(m => m.ToCompany) .WillCascadeOnDelete(false); modelBuilder.Entity<Company>() .HasMany(m => m.Invoices) .WithRequired(m => m.FromCompany) .WillCascadeOnDelete(false);
Там нет, конечно, не главная проблема, если это не возможно, я просто не мог бы поклясться, что я сделал это раньше.