Я пытаюсь добавить составной ключ в таблицу «многие ко многим», используя структуру сущностей, но он не добавляет ключ.
Это наш сервисный метод, который добавляет элемент к свойству.
Property — это таблица, Item — это таблица, PropertyItem — это таблица, участвующая в отношении «многие ко многим».
EF не создает сущность для PropertyItem, поэтому я пытаюсь добавить элементы через сущность свойства. Изменение свойства навигации для элементов в свойстве не сохраняет изменения.
Я пробовал ленивую загрузку, но это не имеет значения
public void addPropertyItem(int propertyId, int itemId)
{
ErrorHandler errorHandler = new ErrorHandler();
try
{
Item item = itemRepo.getSingle(i => i.itemId.Equals(itemId));
if (item == null)
{
errorHandler.addException("Item does not exist.");
}
Property property = propertyRepo.getSingle(p => p.propertyId.Equals(propertyId), p => p.Items);
if (property == null)
{
errorHandler.addException("Property does not exist.");
}
if (!errorHandler.hasErrors())
{
foreach (Item i in property.Items)
{
if (i.itemId == item.itemId)
{
return;
}
}
property.Items.Add(item);
propertyRepo.update(property);
}
Данные извлекаются с помощью следующего кода:
public virtual T getSingle(Func<T, bool> where,
params Expression<Func<T, object>>[] navigationProperties)
{
T item = null;
using (var context = new PropertyManagementDBEntities())
{
IQueryable<T> dbQuery = context.Set<T>();
//Apply eager loading
foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<T, object>(navigationProperty);
item = dbQuery
.FirstOrDefault(where); //Apply where clause
}
return item;
}
Это обновление на стороне DAL.
public virtual void update(params T[] items)
{
using (var context = new PropertyManagementDBEntities())
{
foreach (T item in items)
{
context.Entry(item).State = System.Data.EntityState.Modified;
}
context.SaveChanges();
}
}
Любая помощь приветствуется, спасибо,