Я пытаюсь определить отношения следующих трех классов с первым подходом кода и свободным 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 в законопроекте ? Я не могу найти что-либо подобное в Интернете, чтобы получить полезную информацию о наилучшей практике решения чего-то подобного выше. Любой вход очень приветствуется и оценивается!
Спасибо за ваш быстрый ответ. Вы правы в том, что Билл должен быть необязательным в PaymentRequest: для моего понимания Contract.PaymentRequests теперь совпадает с Bill.PaymentRequests, где Билл связан с Контрактом.Bill, поэтому мне нужно было бы создать что-то вроде описанного выше OpenPaymentRequests правильно? – user3004405
'dbContext.Entry () .Collection (e => e. ) .Query()' предоставит вам 'IQueryable' для свойства коллекции nav, в который вы можете фильтровать и перечислять результаты –
Moho