我是NHibernate的新手并且遇到了一种奇怪的行为(使用NHibernate 2.1.2.4000 FluentNHibernate版本1.1.0.685)。在你第一次访问Item对象后,某个Guid的id会被重置为空。在第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。这有效并且更有意义,仍然没有找到为什么以前的尝试失败的原因。
public class Item:EntityWithTypedId { //私人Guid id;
[DomainSignature]
public new virtual Guid Id
{
get { return base.Id; }
protected set { base.Id = value; }
}
答案 0 :(得分:1)
EntityWithTypedId已经定义了Id属性,您不必自己声明。
例如,在流畅的映射中,您可以安全地使用id属性:
Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);