带有WCF,模型和POCO ViewModels的Linq-To-Sql断开“DataContext”时间戳/行转换

时间:2010-04-06 21:06:07

标签: c# .net sql-server wcf linq-to-sql

我有一个基于Linq-To-Sql的存储库类,我已成功使用它。我正在为解决方案添加一些功能,这将提供基于WCF的数据库访问。

我没有将生成的Linq类暴露为DataContracts,而是创建了我自己的“ViewModel”作为我要返回的每个实体的POCO。

我的问题是,为了进行更新并利用我的服务中的一些Linq-To-Sql功能(如循环引用),我是否需要在数据库中为每个表添加Rowversion / Timestamp字段,以便我可以使用像dc.Table.Attach(myDisconnectedObject)这样的代码吗?交替,似乎很难看:

var updateModel = dc.Table.SingleOrDefault(t => t.ID == myDisconnectedObject.ID);
updateModel.PropertyA = myDisconnectedObject.PropertyA;
updateModel.PropertyB = myDisconnectedObject.PropertyB;
updateModel.PropertyC = myDisconnectedObject.PropertyC;
// and so on and so forth
dc.SubmitChanges();

1 个答案:

答案 0 :(得分:1)

我猜每个表上的RowVersion / TimeStamp列可能是最好的,最不具侵入性的选项 - 只是基本上检查一个值,并且您确定您的数据是否可能在同一时间内被修改。所有其他列可以设置为Update Check=Never。从“返回”对象更新数据库时,这将处理可能的并发问题。

然而,你应该检查的另一件事是AutoMapper - 这是一个很好的小组件,可以通过进行这种映射来缓解你在使用ViewModels / Data Transfer Objects时必须经历的左右分配orgies两个对象类型之间的快照。它使用良好,经过充分测试,被许多人使用并且非常稳定 - 赢家!