2010-06-01 66 views
2

我有一个简单NHiberntate LINQ查询:NHibernate.Linq:会话变脏后选择

var queryable = session.Linq<Product>().Where(p => p.Active); 
Product[] products = queryable.ToArray(); 

ToArray()执行会议的那一刻变脏(session.IsDirty()返回true)。如果提交事务,则会为每个产品生成一个UPDATE SQL查询。

为什么产品在简单SQL SELECT之后被标记为脏?

在这个项目中,我们使用的是如下因素的框架/工具:

  • 的.Net 3.5 + WPF
  • NHibernate的2.1.2 + FluentNHibernate
  • SQlite的
  • PostSharp 1.5
+0

这不是一个LINQ的问题,但一个映射问题。发布您的映射,实体和相关数据库架构。 – Paco 2010-06-01 11:53:26

回答

3

这个问题叫做“幽灵”

这个测试将检测这样的问题: http://fabiomaulo.blogspot.com/2008/10/how-test-your-mappings-ghostbuster.html

这是我的进步,是更详细一点,因此它会给你更多的信息: http://jfromaniello.blogspot.com/2010/02/nhibernate-ghostbuster-version-11.html

+0

非常感谢,就是这样。我使用普通的SQL脚本初始化数据,并将一些列映射到初始化为NULL的int属性。 你的测试通过寿,我认为这是因为它只测试每种类型的第一个实体。 – 2010-06-02 09:58:48