公式属性更新

时间:2017-03-10 13:34:43

标签: c# nhibernate orm mapping-by-code

大家好日子

我在配方属性,更新和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);

在这个内容的模型之后。历史是好的(我在集合和数据库中看到新状态),但属性CurrentState的值没有更新(并且等于检索时刻的状态)。

是否有任何方法可以在保存实体后更新公式属性?

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题