代码之家  ›  专栏  ›  技术社区  ›  Jacob

从xpo迁移到linq到sql的提示

  •  3
  • Jacob  · 技术社区  · 16 年前

    我是devexpress xpo库的长期用户。它有很多优点,但也有一些缺点:

    1. 保存现有对象时,所有属性都将在更新查询中发送;更改是按对象跟踪的,而不是按属性跟踪的。
    2. 乐观锁定是基于每个对象而不是每列进行的。
    3. 当出现乐观锁定异常时,不会提供描述冲突性质的上下文;您唯一真正的响应是使操作失败或重新生成,然后在循环中重试。
    4. 对xpquery的linq支持非常弱(至少在我们使用的8.1中)。因此,您经常被强制使用xpview,它不是类型安全的,或者xpcollection,它可以返回您不需要的列。

    在阅读了LinqToSQL如何实现优化锁定和处理更新冲突之后,我被卖掉了!我喜欢它如何实现列级的乐观锁,并且不需要向表中添加列。能够检查和处理冲突的确切性质是非常重要的。而且,它们跟踪每列的更改应该使其更新查询更加高效。

    当然,我还没有在实际的应用程序中使用linq-to-sql,所以我不知道它在实际中的比较。此外,我不清楚它是否与我们喜欢的xpo功能类似,例如:

    1. 自动模式更新(我们相信对象设计驱动数据库结构,而不是相反,这大大简化了软件部署)
    2. 实现继承的两个选项(相同的表或一对一的表关系)
    3. 支持内存存储(尽管我认为我们可以在单元测试中用linq替换对象)
    4. 存储提供程序定制(允许我们向xpo查询添加nolock支持)

    我们将进行一次探索性的部分迁移,在这里我们将临时为代码的不同部分使用两个表单。你们中有人在xpo和linq-to-sql方面都有实际经验吗?他们在实践中是如何比较的?具体来说,您是否知道Linq to SQL所缺少的任何特性会给代码迁移带来挑战?

    哦,我还应该关心Linq to Entities吗?它看起来比我们需要的任何东西都要复杂得多。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jacob    16 年前

    我很遗憾没有从社区得到任何答案,但我现在的想法是。我有机会在不同的项目上试用linq-to-sql和ado.net实体框架,我觉得ado.net实体框架可以更好地满足我们的需求。就我希望保留的Xpo特定功能而言:

    1. 一旦转换,就必须进行自动模式更新。这是一个小烦恼,但有一些好处,以保持这一独立。
    2. ADO.NET实体框架有许多数据映射选项;似乎支持不同的继承模型。
    3. 对于内存存储,我仍然不确定这有多好的支持。似乎有一个与实体框架兼容的sqlite a do.net提供程序,sqlite可以在内存中存储,因此在理论上,单元测试可以使用指定内存中数据库的不同连接字符串。希望如此简单;否则,如果没有大量工作(抽象出一个存储库接口等),编写单元测试将非常困难。
    4. 我还没有研究供应商定制。我试图构建系统,这样我们就不会像以前那样在服务之间共享太多的数据,所以也许我们不需要所有这些数据。 WITH (NO LOCK) 我在以前的系统中需要的语句。或者SQL Server2008已经改进了其锁定机制,这样我们就不会遇到相同的锁定问题。
        2
  •  0
  •   Tien Do    16 年前

    所以,您确实将应用程序从xpo迁移到了linq2sql,不是吗?我也一直在和Xpo一起玩,老实说,比起Xpo,我更喜欢linq2sql/ef,但是因为它在Xaf中紧密耦合,所以我没有其他选择。我们将使用Xaf来加速我们产品的UI实现,我认为Xaf工作得很好,但我真的很担心Xpo。

    谢谢,