NHibernate, сброс свойств после доступа к связанному объекту - PullRequest
1 голос
/ 06 мая 2011

Я новичок в NHibernate и сталкиваюсь со странным поведением (используя NHibernate 2.1.2.4000 FluentNHibernate версия 1.1.0.685).Каким-то образом идентификатор, который является Guid, сбрасывается на пустой после первого доступа к объекту 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 с new virtual :

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.Итак, я удалил его и получил доступ к идентификатору базового класса.Это работает и имеет больше смысла, но до сих пор не нашел причины, по которой предыдущие попытки не увенчались успехом.

public class Item: EntityWithTypedId {// private Guid id;

    [DomainSignature]
    public new virtual Guid Id
    {
        get { return base.Id; }
        protected set { base.Id = value; }
    }

1 Ответ

1 голос
/ 19 мая 2011

EntityWithTypedId уже определяет Id-свойство, вам не нужно объявлять это самостоятельно.

например, в отображениях с текучей средой вы можете безопасно использовать свойство id с:

Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...