代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

具有wcf、models和poco视图模型的linq-to-sql断开了“datacontext”时间戳/rowversion

  •  0
  • Nate CSS Guy  · 技术社区  · 15 年前

    我有一个基于linq to sql的存储库类,我已经成功地使用了它。我正在向解决方案中添加一些功能,这些功能将提供对数据库的基于wcf的访问。

    我没有将生成的linq类公开为datacontracts,而是为要返回的每个实体创建了自己的“viewmodel”作为poco。

    我的问题是,为了进行更新并利用一些linq-to-sql特性,比如我的服务中的循环引用,我是否需要向by数据库中的每个表添加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 回复  |  直到 15 年前
        1
  •  1
  •   marc_s    15 年前

    我想每个表上的rowversion/timestamp列可能是最好的、最不具侵入性的选项——只需基本上检查一个值,就可以确定数据是否在同一时间被修改。所有其他列都可以设置为 Update Check=Never . 这将处理从“返回”对象更新数据库时可能出现的并发问题。

    不过,另一件事你绝对应该去看看 AutoMapper -这是一个很好的小组件,通过使这两种对象类型之间的映射成为快照,可以减轻使用viewmodels/data transfer对象时必须经历的那些左右分配过程。它使用得很好,测试得很好,被很多人使用,而且非常稳定-一个赢家!