У меня есть универсальный класс RepositoryОбновление Субъект
public class Repository<T>
where T : class
{
AccountingEntities ctx = new AccountingEntities();
public T Add(T entity)
{
ctx.Set<T>().Add(entity);
SaveChanges();
return entity;
}
public T Update(T entity, int id)
{
T existing = ctx.Set<T>().Find(id);
if (existing != null)
{
ctx.Entry(existing).CurrentValues.SetValues(entity);
SaveChanges();
}
return existing;
}
public T GetSingle(Expression<Func<T, bool>> filter)
{
var query = ctx.Set<T>().AsNoTracking().Where(filter).FirstOrDefault();
return query;
}
private void SaveChanges()
{
ctx.SaveChanges();
}
}
и у меня есть пункт два стола и банк. И каждый банк может иметь несколько предметов.
У меня есть две кнопки добавления и редактирования и один глобальный репозиторий в моей форме.
Когда я открываю форму и заполнить данные и нажмите кнопку Добавить, так запись будет сохранять и каждый
вещь в порядке, но в это время, когда я нажимаю редактировать будет ошибка давайте посмотрим
моего редактировать код кнопки:
private void _btnEdit_Click(object sender, EventArgs e)
{
var item = repository.GetSingle(i => i.Id == id);
// here i update property of item
item = repository.Update(item, item.Id);
// here i get updated item
}
моя проблема заключается в том, что в этой строке кода
var item = repository.GetSingle(i => i.Id == id);
, когда я получить деталь, это навигационное свойство (здесь банк юридического лица) заполняется
но в этой строке кода
item = repository.Update(item, item.Id);
Когда я уточняю деталь и получить его, это свойство навигации (банк) является нулевым
и я не могу использовать товар. Банк, потому что это null.
Наконец-то я понял, где это проблема, которую я создал глобальный архив
Repository<Item> repository = new Repository<Item>();
и использовать репозиторий в оных и метод редактирования. И когда я создал
отдельного хранилища в каждом добавить и метод редактирования он работает отлично
Я хочу знать, почему это происходит?
Почему вы используете 'пункт = repository.Update (пункт, ItemId) ; '? вы присваиваете что-то объекту 'item' в этой строке? Я считаю, что вам просто нужно сделать 'repository.Update (item, itemId);' – Vahx