在我的应用程序中,有很多情况需要更新数据库中实体的单个属性。在互联网上我已经读过DynamicUpdate()
应该改变Fluent NHibernate的行为,所以它只会更新属性!= null
所以我写了这样的映射:
public class Building
{
public virtual Guid Id { get; set; }
public virtual int ConstructionPhase { get; set; }
public virtual string Name { get; set; }
[some other properties]
}
public class BuildingMap : ClassMap<Building>, IMappedEntity
{
public BuildingMap()
{
DynamicUpdate();
SelectBeforeUpdate();
Id(x => x.Id);
Map(x => x.ConstructionPhase);
Map(x => x.Name);
[some other properties]
}
}
但是如果我尝试更新实体并将name
属性留空,则会在数据库中删除该名称。
我是否必须以其他方式配置Fluent NHibernate,或者问题是什么?
答案 0 :(得分:4)
DynamicUpdate()
将指示NHibernate仅保存已更改的属性,以便加载对象,更改单个属性和刷新会话只会更新已更改的列。
更新:更新单个属性而不转到数据库使用hql
var affectedRows = session.CreateQuery("UPDATE MyEntity SET SomeProperty=:newValue WHERE Id=:id")
.SetParameter("newValue", value)
.SetParameter("id", id)
.ExecuteUpdate();