NHibernate,在访问相关对象后重置属性
本文关键字:属性 对象 访问 NHibernate | 更新日期: 2023-09-27 17:55:14
我是NHibernate的新手,遇到了奇怪的行为(使用NHibernate2.1.2.4000 FluentNHibernate版本1.1.0.685)。不知何故,作为 Guid 的 id 在您首次访问 Item 对象后被重置为空。访问相关对象(如第 2 行)时是否会发生一些副作用?
1. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id);
2. var ItemStageId = widgetQueue.Item.CurrentStage.Id.ToString();
3. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id);
Output Window:
113a6af2-3fe2-49c2-9276-9ec30081a811
00000000-0000-0000-0000-000000000000
更新:
我将 Id 字段从新的虚拟中更改:
public class Item : EntityWithTypedId<Guid>
{
private Guid id;
[DomainSignature]
public new virtual Guid Id
{
get { return id; }
protected set { id = value; }
}
....
public Item() {
Id = Guid.Empty;
....
}
public Item(Guid id)
: base()
{
Id = id;
}
}
要覆盖:
public class Item : EntityWithTypedId<Guid>
{
private Guid id;
[DomainSignature]
public override Guid Id
{
get { return id; }
protected set { id = value; }
}
....
}
我期待运行时错误,因为我读取属性需要是虚拟的才能使延迟加载工作。知道发生了什么吗?
更新 2:我注意到我们声明了一个实例变量来支持 Id 属性。因此,我删除了它并访问了基类的 ID。这有效并且更有意义,仍然没有找到之前尝试失败的原因。
公共类 项目 : EntityWithTypedId { 私人 Guid ID;
[DomainSignature]
public new virtual Guid Id
{
get { return base.Id; }
protected set { base.Id = value; }
}
EntityWithTypedId 已经定义了一个 Id 属性,你不必自己声明。
例如,在 Fluent 映射中,您可以安全地将 id 属性用于:
Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);