gpt4 book ai didi

nhibernate - 使用 Fluent NHibernate 映射没有 setter 的只读属性

转载 作者:行者123 更新时间:2023-12-04 16:36:53 24 4
gpt4 key购买 nike

我有一个看起来像这样的域类。我希望 NHibernate 保存 LastUpdate 的当前值插入/更新以便我可以在查询中使用它,但在检索 Foo 时忽略它从数据库中,让对象本身在我实际访问它时重新计算值。

public class Foo {
public DateTime LastUpdate {
get {
/* Complex logic to determine last update by inspecting History */
return value;
}
}
public IEnumerable<History> History { get; set; }
/* etc. */
}

我的 Foo 的映射看起来像这样:
public class FooMap : ClassMap<Foo> {
Map(x => x.LastUpdate)
.ReadOnly();
HasMany(x => x.History);
// etc...
}

我以为 ReadOnly()是我想要完成的,但是当我尝试创建 SessionFactory 时,出现以下异常:

Error: FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
---> NHibernate.PropertyNotFoundException: Could not find a setter for property 'LastUpdate' in class 'Foo'.



该属性没有 setter ,因为它不应该被设置,只能读取。是 ReadOnly()在这里做正确的事?如果不是,那是什么?

(NHibernate v3.0b1,流畅的 NHibernate v1.1)

最佳答案

ReadOnly指示 Fluent NHibernate 不查找此属性的更改,这不等同于编译器世界中的只读属性。您的属性在 NHibernate 的眼中不是只读的,因为您希望它从您的数据库中填充。您需要做的是告诉 NHibernate 它应该通过与该属性同名(小写)的私有(private)字段访问该属性的值。

Map(x => x.LastUpdate)
.Access.Field();

使用 Field 有几种替代方法,您使用哪一个将取决于您如何命名私有(private)字段。

关于nhibernate - 使用 Fluent NHibernate 映射没有 setter 的只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4110141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com