Опитвам се да добавя съставен ключ в таблица много към много, използвайки рамка на обект, но това не добавя ключа.
Това е нашият сервизен метод, който добавя артикул към собственост
Property е таблица, Item е таблица, PropertyItem е таблицата, включена във връзката много към много.
EF не генерира обект за PropertyItem, така че се опитвам да добавя елементи чрез обекта на свойството. Промяната на свойството за навигация за елементи в свойството не запазва промените.
Опитах Lazy Loading, но няма разлика
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();
}
}
Всяка помощ се оценява, благодаря,