更新实体的推荐方法是什么?到目前为止,我想出了两种方法:
No1需要更少的努力,但有时候我得到一个例外:“具有相同标识符值的不同对象已经与会话相关联”。有一个简单的方法吗?
No2可能需要额外的DB之旅吗?
很抱歉,如果已经回答了,那就找不到答案了。
由于 乌鲁
答案 0 :(得分:2)
您对DTO的第二个选择是我的首选方式。您的DTO应该特定于屏幕(Google Screen Bound DTO),以便屏幕和您的域可以彼此独立地更改。
它也不会为数据库添加额外的行程,因为#1需要一个断开的实体,事实之后必须重新连接(触发选择)。担心一个额外的选择也强烈过早优化。
在从域转换为DTO方面,我建议您查看AutoMapper。
答案 1 :(得分:1)
要使用No1,您可以尝试从nHibernates会话中逐出该对象。这将消除有关会话中已存在的对象的错误。
我建议使用方法编号2.特别是如果你想添加任何种类的光学锁定。在许多情况下,对数据库的一次额外打击也不会那么昂贵。
修改强>
要检查会话中是否已存在实体,您可以在Session实例上使用Contains(obj)方法。