Я начал возиться с EF 4.0, потому что мне интересно узнать о возможностях POCO... Я хотел смоделировать отключенную веб-среду и написал следующий код, чтобы имитировать это:
- Сохранить тестовый объект в базе данных.
- Получить тестовый объект
- Утилизируйте DataContext, связанный с тестовым объектом, который я использовал для его получения.
- Обновить тестовый объект
- Создайте новый контекст данных и сохраните изменения на тестовом объекте, которые автоматически отслеживаются в DynamicProxy, сгенерированном против моего объекта POCO.
Проблема заключается в том, что когда я вызываю dataContext.SaveChanges в методе теста выше, обновления не применяются. Объект testStore показывает статус "Модифицированный", когда я проверяю его EntityStateTracker, но он больше не изменяется, когда я просматриваю его в новом свойстве dataContext Stores. Я бы подумал, что вызов метода Attach в новом dataContext также приведет к состоянию объекта "Модифицированное", но это, похоже, не так. Есть что-то, чего я не хватает? Я определенно работаю с самоконтролем POCOs с помощью DynamicProxies.
private static void SaveTestStore(string storeName = "TestStore")
{
using (var context = new DataContext())
{
Store newStore = context.Stores.CreateObject();
newStore.Name = storeName;
context.Stores.AddObject(newStore);
context.SaveChanges();
}
}
private static Store GetStore(string storeName = "TestStore")
{
using (var context = new DataContext())
{
return (from store in context.Stores
where store.Name == storeName
select store).SingleOrDefault();
}
}
[Test]
public void Test_Store_Update_Using_Different_DataContext()
{
SaveTestStore();
Store testStore = GetStore();
testStore.Name = "Updated";
using (var dataContext = new DataContext())
{
dataContext.Stores.Attach(testStore);
dataContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
}
Store updatedStore = GetStore("Updated");
Assert.IsNotNull(updatedStore);
}