У меня есть класс BaseRepository, который используется всеми хранилищами для сохранения объектов (новые или обновленные):Entity Framework 4: Каков наилучший способ добавить и сохранить объект?
public abstract class BaseRepository
{
protected void Add<T>(T source, CliCEntities context, bool isNew, EntityState state) where T : class
{
if (isNew)
{
context.CreateObjectSet<T>().AddObject(source);
}
else
{
if (state == EntityState.Detached)
{
context.CreateObjectSet<T>().Attach(source);
}
}
}
protected void Save(MyEntities context)
{
context.SaveChanges();
}
}
Это называется так:
public class MyEntityRepository : BaseRepository
{
public void Add(MyEntity source, MyEntities context)
{
base.Add(source, context, source.ID == Guid.Empty, source.EntityState);
}
public void Save(MyEntities context) {
base.Save(context);
}
}
Вопрос
Когда вызывается base.Save(), нет никакой разницы в данных, EntityState не изменяется. Я предполагаю, что это связано с тем, что загрузка была на другом экземпляре Context, поэтому текущий контекст не знает о каких-либо изменениях.
Как изменить приведенный выше код, чтобы исходный экземпляр имел EntityState Modified (чтобы он работал)?
Вы используете инъекцию зависимости? Если вы, вы можете установить свой DbContext как одноточечный запрос, и каждый раз он будет тем же самым экземпляром объекта. – Luke
Я использую UnitOfWork на уровне домена. – Spikee