0

在我的应用程序中,有很多情况下我必须更新数据库中实体的一个属性。在互联网上,我读到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,或者有什么问题?

4

1 回答 1

4

DynamicUpdate()将指示 NHibernate 仅保存已更改的属性,因此加载对象、更改单个属性和刷新会话将仅更新已更改的列。

更新:更新单个属性而不去数据库使用 hql

var affectedRows = session.CreateQuery("UPDATE MyEntity SET SomeProperty=:newValue WHERE Id=:id")
    .SetParameter("newValue", value)
    .SetParameter("id", id)
    .ExecuteUpdate();
于 2012-07-31T12:39:12.433 回答