相关问题here。
对于大多数ORM,当您对现有上下文运行查询时,它不会返回自首次从数据库返回对象以来已更改的数据。它向DB发出查询,但不会返回对DB所做的任何更改,因为上下文不想踩踏您的对象(有关Linq to SQL中此行为的讨论,请参阅here)。这适用于使用工作单元模式的短期上下文,但如果使用长期上下文则不太好。
我已经尝试过Linq to SQL和Entity Framework,两个框架都提供了一个刷新方法,允许你指定一个枚举参数来覆盖上下文中的现有对象,但这不会获取新记录(至少没有其他查询)更重要的是,不会删除已从DB中删除的记录的对象。
我知道我可以丢弃上下文和现有对象,但我不想这样做,因为对象绑定到应用程序中的其他元素。
是否有任何ORM能够使用DB的最新数据刷新对象,为新创建的对象添加对象并删除已从DB中删除的记录的对象,理想情况是以有效的方式(即使用MS SQL rowversion列。)
答案 0 :(得分:1)
我不确定,但似乎你需要类似于DataObjects.Net行为的东西。它们的实体是长期存在的会话绑定对象,用于以事务状态存储数据。当您打开新事务并读取现有对象的持久属性时,它们会自动从数据库中获取它(它还涉及EntitySet属性)。
当然,您应该为每个事务执行复杂查询,以使查询结果保持实际状态,但我认为它可以很容易地自动化。
答案 1 :(得分:0)