У меня есть таблица и ее представление, и оба сопоставлены как отдельные объекты. У меня начинаются проблемы, когда я пытаюсь отобразить (сначала код) зависимые элементы как в таблицу, так и в представление при сохранении:
Referential integrity constraint violation. A Dependent Role has multiple principals with different values.
Позвольте мне показать вам, что я имею в виду, представив упрощенную модель .
public class Sale
{
public long Id {get;set}
public string Code {get;set;}
public ICollection<SaleItem> Items {get;set;}
}
public class SaleView
{
public long Id {get;set}
public string SaleCode {get;set;}
public decimal Total {get;set;}
// I would like to add the items collection here too
// public ICollection<SaleItem> Items {get;set;}
}
public class SaleItem
{
public long Id {get;set;}
public decimal Price {get;set;}
public string Title {get;set;}
public long DocumentId {get;set;}
public Sale Sale {get;set;}
public SaleView View {get;set;}
}
//mappings
enter code here
public SaleItemMapping()
{
HasKey(t => t.Id);
ToTable("saleitems", "public");
Property(x=>x.DocumentId ).HasColumnName("documentid");
// ...
HasRequired(t => t.Sale).WithMany(t => t.Items).HasForeignKey(d => d.DocumentId );
HasRequired(t => t.View).WithMany(t => t.Items).HasForeignKey(d => d.DocumentId );
}
Я хочу sh добавить элементы в представление, потому что я хочу отфильтровать SaleView
по свойству Item
. И это работает просто отлично:
var query = dbContext.SaleView.AsNoTracking().AsQueryable();
if(!string.IsNullOrEmpty(searchItem)
query = query.Where(x=>x.Items.Any(i=> i.Title == searchItem)))
// apply other filters
проблемы начинают появляться, когда я не ищу элементы, но когда я начинаю вставлять новый Sales
. Я могу просто добавить один документ, но когда их два или более, я получаю ошибку выше.
Итак, в заключение я ищу ответы, как я могу отфильтровать строки SaleView
по его связанные свойства объекта или исправьте сопоставление, чтобы я мог вставить новый Sales
без ошибок.
В простом SQL я мог бы просто LEFT JOIN
Items
в SaleView
и вообще без проблем .
PS Я не могу заставить сущность SaleView
наследовать сущность Sale
, они слишком разные. Мне было очень трудно найти решение самостоятельно, потому что код ошибки просто направлял меня к проблемам, когда люди непреднамеренно допускали ошибки отображения, ну, моя «ошибка» была преднамеренной.