公式属性更新
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
大家好
我在使用公式 属性、更新和 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