公式属性更新

Formula property update

大家好

我在使用公式 属性、更新和 nhibernate 时遇到一些问题

假设,我有下一个模型:

public class Model
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual State CurrentState { get; protected set; }
    public virtual ICollection<State> History { get; set; }

    public Model()
    {
        State = new List<State>();
    }
}

public class State
{
    public virtual Guid Id { get; set; }
    public virtual DateTime Timestamp { get; set; }
    public virtual string Description { get; set; }
    public virtual string Author { get; set; }
    public virtual Model Owner { get; set; }
}

这是我的映射(NHibernate 4.0.0.4000,使用代码映射(不是 fluentnhibernate))

public class ModelMapping: ClassMapping<Model>
{
    public ModelMapping()
    {
        Id(x => x.Id, m => m.Generator(Generators.Assigned));
        Property(x => x.Name);
        ManyToOne(x => x.CurrentState, c => 
        {
            c.Formula("(select top(1) s.Id from State s where s.Owner = Id order by s.Timestamp desc)");
        });
        Bag(x => x.History, c =>
        {
            c.Cascade(Cascade.All);
            c.Key(k => 
            {
                k.ForeignKey("none");
                k.Column("ParentId");
            });
            c.OrderBy(x => x.Timestamp);
        });
    }
}

public class StateMapping: ClassMapping<State>
{
   public StateMapping()
   {
        Id(x => x.Id);
        Property(x => x.Timestamp);
        Property(x => x.Description);
        Property(x => x.Author);
        ManyToOne(x => x.Owner, c => c.Column("ParentId"));
   } 
}

现在,我想检索一些模型实体(通过知道它们的 ID),

var model = modelRepository.Get(<someId>);

如果我看到 model.CurrentState 我看到正确的状态 (model.CurrentState = model.History.Last())

接下来,我尝试添加新状态并保存实体

model.History.Add(new State(){...});
modelRepository.Save(model);

在 model.History 的内容正常后(我在集合和数据库中看到新状态),但 属性 CurrentState 的值未更新(等于检索时的状态)。

保存实体后是否有更新公式 属性 的方法?

让加载的实体刷新的唯一方法是调用刷新或重新加载实体。

您的历史记录看起来是正确的,因为您实际上在本地更改了该状态并将更新发送到服务器。

这是相关的 link。 https://weblogs.asp.net/ricardoperes/nhibernate-pitfalls-entity-refresh