NHibernate部分更新

时间:2009-08-17 00:28:36

标签: nhibernate

NHibernate中是否有一种方法可以从一个未经代理的模型开始

var m = new Model() { ID = 1 };
m.Name = "test";
//Model also has .LastName and .Age

现在保存此模型只更新名称而不先从会话中选择模型吗?

3 个答案:

答案 0 :(得分:2)

如果model有其他属性然后命名,你需要用数据库中的原始值初始化它们,除非它们被设置为null。

您可以使用 HQL update operations ;我自己从未尝试过。

您还可以使用原生SQL 语句。 ( “Update model set name ...”)。

通常,不需要进行此优化。在极少数情况下,您需要避免选择数据,因此编写此SQL语句只是浪费时间。您正在使用ORM,这意味着:编写面向您的软件对象!除非你不会从中获得太多的好处。

答案 1 :(得分:1)

斯特凡说的看起来像你需要的东西。请注意,这确实是一个边缘情况,除非您遇到一些超高性能问题,否则您应该对完全加载实体感到满意。

如果您根本不想访问数据库 - 尝试使用缓存 - 实体缓存非常简单有效。

如果你的实体是一个巨大的实体 - 即它包含一个blob或其他东西 - 想想将它分成两部分(多对一以便你可以利用延迟加载)。

答案 2 :(得分:0)

http://www.hibernate.org/hib_docs/nhibernate/html/mapping.html

  

动态更新(可选,默认为   false):指定UPDATE SQL   应该在运行时生成   仅包含那些列的列   价值观发生了变化。

在HBM中的类上放置动态更新。

var m = new Model() { ID = 1 };
m = session.Update(m); //attach m to the session.
m.Name = "test";
session.Save(m);