到目前为止,我没有使用MVP,而是尝试了如下长对话模式:
private void SaveItem(object sender, EventArgs e)
{
using (var transaction = _businessTransactionFactory.Create())
{
var currentMobileDevice = GetCurrentMobileDevice();
if (currentMobileDevice.Id == Guid.Empty)
{
transaction.MobileDeviceRepository.Save(currentMobileDevice);
}
else
{
transaction.MobileDeviceRepository.Update(currentMobileDevice);
}
transaction.Commit();
LoadData(transaction);
}
}
private MobileDevice GetCurrentMobileDevice()
{
return (MobileDevice)MobileDevicesBindingNavigator.BindingSource.Current;
}
我遇到的问题:
我总是必须与独立实体合作。
使用分离的实体会强制EntityFramework更新所有列,而不是更改的列:
public void Update(T entity)
{
if (_objectContext.ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Detached)
{
_objectSet.Attach(entity);
_objectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
}
}
您如何在Windows Forms应用程序中处理上下文?
两者的优缺点是什么?
最佳答案
典型场景是每个演示者的新上下文,其中在同一数据上有不同的视图时,演示者可以处理多个视图。在MSDN杂志中对此非常有帮助。它以NHibernate的会话为目标,但是EF的上下文管理应该采用相同的方法来完全解决分离实体遇到的问题。