首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nHibernate实体和DTO发送网格数据

使用nHibernate实体和DTO发送网格数据
EN

Stack Overflow用户
提问于 2010-08-19 14:01:30
回答 2查看 929关注 0票数 2

我们在我们的域模型中使用nHibernate,并希望创建DTO,用于通过WCF将对象发送到使用MVVM模式(WPF/WinForms)的前端应用程序。我们完全控制着客户端和服务器端--两者同时升级,所以版本控制/跨平台不是问题。

我知道编辑单个条目是如何工作的,但是我仍然不确定通过网络发送对象集合的最佳方式。DTO然后用于填充网格,可以在其中更新、删除或添加行。

我的问题是:在类似网格/表的场景中,使用DTO和nHibernate捕获插入、更新和删除的最佳方法是什么?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-08-24 19:11:44

我很可能会发送一个容器类,其中包含新的和更新的实例以及要删除的项。

例如:

代码语言:javascript
复制
class GridModificationsDto
{
  Dto[] NewOrUpdatedItems { get; set; }
  Identity[] DeletedItems { get; set; }
}

当一个项目是新的时,它没有id。你也可以为新项目建立一个单独的列表。

然后你需要这样做:

代码语言:javascript
复制
foreach(Dto dto in modifications.NewOrUpdatedItems)
{
  if (dto.id == 0)
  {
    session.Save(DtoMapper.CreateEntity(dto));
  }
  else
  {
    Entity entity = session.Get<Entity>(dto.id);
    DtoMapper.Update(entity, dto);
  }
}

foreach(Identity identity in modifications.DeletedItems)
{
  session.Delete<Entity>(identity.id);
}

我不知道您如何在ui中获取已修改项目的列表。我认为这可以通过数据绑定和PropertyChanged事件之类的东西来实现。如果没有任何有用的东西,你可能需要继承你自己的Grid控件。

票数 1
EN

Stack Overflow用户

发布于 2010-08-19 21:31:14

您需要绑定到BindingSource,如下所示:

代码语言:javascript
复制
dataGridView1.DataSource = _presenter.BindingSource;

你还将在你的视图和演示者之间建立一个接口。

在您的展示器中,您将返回一个IList<NHibernateResult>,其中NHibernateResult是包含您要返回的属性的所有getter和setter的类。它可以是一个具有有限属性(例如列)的自定义类,也可以是您的实体类。NHibernateResult不是一个实际的类,只是这个答案的一个占位符。

例如(在presenter中),

代码语言:javascript
复制
private IList<OrdersResult> _bindingSource;

        public IList<OrdersResult> BindingSource
        {
            get
            {
                //_bindingSource = OrderDataControl.Instance.GetAll();
                _bindingSource = 
                    OrderDataControl.Instance.GetSimpleOrderList(_firstResult, _maxResult);
                return _bindingSource;
            }

            set
            {
                _bindingSource = value;
            }
        }

OrderDataControl是数据访问对象或数据传输对象。它与您的SessionProvider和存储库(也称为模型)进行交互。

这种级别的抽象从您的presenter中移除了数据层,并使您的视图对模型完全无能为力。它将您的视图降级为仅与UI相关的事件,如启用、可见、颜色等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3519118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档