1

Я пытаюсь определить отношения следующих трех классов с первым подходом кода и свободным API, но я достигаю тупика.Entity Framework - Code First/Fluent API - Свойства фильтрованной навигации

Учитывая следующие три класса:

public class Contract { 
    public Contract { 
    this.PaymentRequests = new HashSet<PaymentRequest>(); 
    this.Bills = new HashSet<Bill>(); 
    } 

    public long Id { get; set; } 
    public virtual ICollection<PaymentRequest> PaymentRequests { get; set; } 
    public virtual ICollection<Bill> Bills { get; set; } 
} 

public class Bill { 
    public Bill { 
    this.PaymentRequests = new HashSet<PaymentRequest>(); 
    } 

    public long Id { get; set; } 
    public virtual Contract Contract { get; set; } 
    public virtual ICollection<PaymentRequest> PaymentRequests { get; set } 
} 

public class PaymentRequest { 
    public long Id { get; set; } 
    public virtual Contract Contract { get; set; } 
    public virtual Bill Bill { get; set; } 
} 

Я хочу, чтобы определить отношения следующим образом: договор содержит список PaymentRequests, которые не имеют законопроекта установить еще и список счетов, содержащий список PaymentRequests с биллом, установленным для текущего счета.

Поэтому я соответственно пытаюсь настроить отображение:

public class ContractMap : EntityTypeConfiguration<Contract> { 
    public ContractMap() { 
    this.HasKey(x => x.Id); 

    this.HasMany(x => x.PaymentRequests) 
     .WithRequired(pr => pr.Contract); 
    this.HasMany(x => x.Bills) 
     .WithRequired(b => b.Contract); 
    } 
} 

public class BillMap : EntityTypeConfiguration<Bill> { 
    public BillMap() { 
    this.HasKey(x => x.Id); 

    this.HasRequired(x => x.Contract); 
    this.HasMany(x => x.PaymentRequests) 
     .WithRequired(x => x.Bill); 
    } 
} 

public class PaymentRequestMap : EntityTypeConfiguration<PaymentRequest> { 
    public PaymentRequestMap() { 
    this.HasKey(x => x.Id); 

    this.HasRequired(x => x.Contract); 
    this.HasOptional(x => x.Bill); 
    } 
} 

Но это на самом деле не работает. Возможно ли вообще определить такие отношения или мне нужно создать другой член, который, например, называется OpenPaymentRequests, и сказать EF игнорировать его, а затем заполнить его (например) репозиторием и сделать то же самое для PaymentRequests в законопроекте ? Я не могу найти что-либо подобное в Интернете, чтобы получить полезную информацию о наилучшей практике решения чего-то подобного выше. Любой вход очень приветствуется и оценивается!

ответ

1

Вы конфигурированию PaymentRequests требовать одновременно Bill и Contract через ваши ContractMap и BillMap классов. Для ваших целей, PaymentRequest должны только требуют Contract - Bill должно быть факультативным (как вы решили сделать в вашем PaymentRequestMap класс, который на самом деле не требуется из-за двух предыдущих классов конфигурации)

public class ContractMap : EntityTypeConfiguration<Contract> { 
    public ContractMap() { 
    this.HasKey(x => x.Id); 

    this.HasMany(x => x.PaymentRequests) 
     .WithRequired(pr => pr.Contract); 
    this.HasMany(x => x.Bills) 
     .WithRequired(b => b.Contract); 
    } 
} 

public class BillMap : EntityTypeConfiguration<Bill> { 
    public BillMap() { 
    this.HasKey(x => x.Id); 

    this.HasRequired(x => x.Contract); 
    this.HasMany(x => x.PaymentRequests) 
     // change this to .WithOptional(x => x.Bill) 
     .WithOptional(x => x.Bill); 
    } 
} 

public class PaymentRequestMap : EntityTypeConfiguration<PaymentRequest> { 
    public PaymentRequestMap() { 
    this.HasKey(x => x.Id); 

    this.HasRequired(x => x.Contract); 
    this.HasOptional(x => x.Bill); 
    } 
} 
+0

Спасибо за ваш быстрый ответ. Вы правы в том, что Билл должен быть необязательным в PaymentRequest: для моего понимания Contract.PaymentRequests теперь совпадает с Bill.PaymentRequests, где Билл связан с Контрактом.Bill, поэтому мне нужно было бы создать что-то вроде описанного выше OpenPaymentRequests правильно? – user3004405

+0

'dbContext.Entry () .Collection (e => e. ) .Query()' предоставит вам 'IQueryable' для свойства коллекции nav, в который вы можете фильтровать и перечислять результаты – Moho

Смежные вопросы