到目前为止,我没有使用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的上下文管理应该采用相同的方法来完全解决分离实体遇到的问题。

10-08 01:07