NHibernate,在访问相关对象后重置属性

时间:2011-05-05 23:47:25

标签: c# asp.net-mvc nhibernate

我是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; }
    }

1 个答案:

答案 0 :(得分:1)

EntityWithTypedId已经定义了Id属性,您不必自己声明。

例如,在流畅的映射中,您可以安全地使用id属性:

Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);