gpt4 book ai didi

NHibernate 实体未更新

转载 作者:行者123 更新时间:2023-12-02 17:28:48 26 4
gpt4 key购买 nike

什么会导致更改不为现有实体生成更新语句?我有一个更新实体状态枚举的命令。它将其从“事件”更改为“已删除”。我(通常)使用相同的命令来更新其他实体上的状态位,没有出现问题。我可以更新相关实体上的单个字符串,而无需更改其他任何内容,并且更新过程正常。我可以在 NProf 中观察到这一切......

我想我的问题是:

  • 当枚举值(没有其他......或其他东西?)更改时,什么会导致 NHibernate 不更新实体?
  • 追踪此类问题的最佳方法是什么?

感谢您的帮助!

一条线索。基本类型的属性是:

public virtual EntityStatus Status { get; protected set; }

如果我将 setter 公开并直接分配给它,NHibernate 就会很好地选择它。当它受到保护时,我调用实体上的方法并更新那里的状态。这能提供任何线索吗?

最佳答案

所以,这是一个有趣的事情,但追踪起来却非常痛苦。事实证明,在 Any 映射中使用延迟加载会以某种方式将老狗搞砸。因此,当我这样做时,调用虚拟方法来更新 protected 属性不起作用:

Any(o => o.Thing, typeof(Guid), m =>
{
m.IdType<Guid>();
m.MetaType<string>();
m.MetaValue("Squirmy", typeof(SquirmyThing));
m.MetaValue("Odoriferous", typeof(OdoriferousThing));
m.Columns(id => id.Name("ThingId"), cr => cr.Name("ThingType"));
m.Lazy(true);
m.Cascade(Cascade.Persist);
});

但是当我这样做时它确实有效:

Any(o => o.Thing, typeof(Guid), m =>
{
m.IdType<Guid>();
m.MetaType<string>();
m.MetaValue("Squirmy", typeof(SquirmyThing));
m.MetaValue("Odoriferous", typeof(OdoriferousThing));
m.Columns(id => id.Name("ThingId"), cr => cr.Name("ThingType"));
m.Lazy(false);
m.Cascade(Cascade.Persist);
});

无论如何,我真的希望这可以帮助其他疯狂到使用 Any 映射的人。

关于NHibernate 实体未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com