代理和缓存问题

时间:2013-04-19 13:34:47

标签: nhibernate fluent-nhibernate

我发布了有关丢失集合中各种记录的记录ID的问题。 ID为0,当单步执行代码时,我会在记录元素上看到“Proxy ....”。

以下是我发现的......

如果我在运行相同查询的页面上有3个控件,则第一个控件将获得具有记录ID的整个记录​​集。另外2个将获得记录的缓存副本,其中一些记录ID为0.当检查记录集时,它将看到“Proxy ...”和GUID查找号码。展开它,除了ID字段外,记录在那里。该字段为0。

要清除它,我必须在调用查询之前在第二个控件中发出以下命令:

FluentSessionManager.GetSession().Evict(typeof(IList<Patients>));

然后,这只解决了第二个控件的问题,第三个控件仍然有问题。我必须在第3个控件中做同样的事情。

我可以用3种不同的方式来解决这个问题。寻找解决方案来关闭2级缓存(无法找到),找到2级缓存的修复程序(仍然无法找到),或者找到一种方法将第2个只读字段映射到ID字段(我还没有完全找到)研究了如何做到甚至知道它是否有效。

如果这是修复它的唯一方法,我可以设置第二个只读字段。

例如,将在3个不同的控件中调用以下查询。 “患者”的记录在第2和第3对照中会出现“代理...”问题。并且“儿童”可能会/可能不会出现同样的问题。

用于获取集合的查询示例:

public IList<Patients> GetAllPatients()
{
    return FluentSessionManager.GetSession()
        .CreateCriteria<Patients>()
        .Add(Expression.Eq("IsDeleted", false))
        .SetFetchMode("Children", Eager)
        .List<Patients>();
}

对此的任何帮助将不胜感激。

感谢。

0 个答案:

没有答案