我是 DevExpress XPO 库的长期用户。它有很多很棒的功能,但也有一些弱点:
- 保存现有对象时,所有属性都在更新查询中发送;更改是基于每个对象而不是每个属性来跟踪的。
- 乐观锁定是在每个对象的基础上完成的,而不是每列。
- 当发生乐观锁定异常时,不会提供描述冲突性质的上下文;您唯一真正的反应是使操作失败或重现它并在循环中重试。
- LINQ 对 XPQuery 的支持非常弱(至少在我们正在使用的 8.1 中)。因此,您经常被迫使用不是类型安全的 XPView 或 XPCollection,它可能返回您不一定需要的列。
在阅读了 LINQ to SQL 如何实现优化锁定和处理更新冲突之后,我被卖了!我喜欢它如何实现列级乐观锁定并且不需要向表中添加列。能够检查和处理冲突的确切性质是很棒的。他们跟踪每列更改的事实应该使其更新查询更加高效。
当然,我还没有在实际应用中使用过LINQ to SQL,所以我不知道它在现实中的比较。此外,我不清楚它是否具有我们喜欢 XPO 的某些功能的类似物,例如:
- 自动模式更新(我们相信对象设计驱动数据库结构而不是相反,这大大简化了软件部署)
- 如何实现继承的两个选项(同表或一对一的表关系)
- 支持内存存储(尽管我认为我们可以在单元测试中将 LINQ 替换为对象)
- 存储提供程序自定义(允许我们向 XPO 查询添加 NOLOCK 支持)
我们将进行探索性的部分迁移,我们将暂时将两个 ORM 用于代码的不同部分。你们中的任何人都有使用 XPO 和 LINQ to SQL 的实际经验吗?他们在实践中如何比较?具体来说,您是否知道 LINQ to SQL 缺少的任何会为代码迁移带来挑战的功能?
哦,我什至应该关心 LINQ to Entities 吗?它看起来比我们需要的任何东西都要复杂得多。