Издевательская или фальсификация DbEntityEntry или создание новой DbEntityEntry
Следуя за моим другим вопросом насчет насмешки DbContext.Set У меня есть еще один вопрос насчет насмешек EF Code First.
Теперь у меня есть метод для моего обновления, который выглядит так:
if (entity == null)
throw new ArgumentNullException("entity");
Context.GetIDbSet<T>().Attach(entity);
Context.Entry(entity).State = EntityState.Modified;
Context.CommitChanges();
return entity;
Контекст - это интерфейс моего собственного DbContext.
Проблема, с которой я работаю, - это как я обрабатываю
Context.Entry(entity).State
.
Я прошел через этот код, и он работает, когда у меня есть реальный живой DbContext в качестве реализации моего интерфейса Context. Но когда я помещаю свой поддельный контекст, я не знаю, как с ним справиться.
Нет конструктора для класса DbEntityEntry, поэтому я не могу просто создать новый в моем поддельном контексте.
Кто-нибудь имел какие-либо успехи с издевательством или подделкой DbEntityEntry в ваших решениях CodeFirst?
Или есть лучший способ справиться с изменениями состояния?
Ответы
Ответ 1
Как и в другом случае, вам нужно добавить дополнительный уровень косвенности:
interface ISalesContext
{
IDbSet<T> GetIDbSet<T>();
void SetModified(object entity)
}
class SalesContext : DbContext, ISalesContext
{
public IDbSet<T> GetIDbSet<T>()
{
return Set<T>();
}
public void SetModified(object entity)
{
Entry(entity).State = EntityState.Modified;
}
}
Итак, вместо вызова реализации вы просто вызываете SetModified
.