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

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

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

例如,在 Fluent 映射中,您可以安全地将 id 属性用于:

Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);
相关文章: