NHibernate中是否有一种方法可以从一个未经代理的模型开始
var m = new Model() { ID = 1 };
m.Name = "test";
//Model also has .LastName and .Age
现在保存此模型只更新名称而不先从会话中选择模型吗?
答案 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);