【发布时间】:2009-08-17 00:28:36
【问题描述】:
在 NHibernate 中有没有办法从非代理模型开始
var m = new Model() { ID = 1 };
m.Name = "test";
//Model also has .LastName and .Age
现在保存这个模型只更新名称而不先从会话中选择模型?
【问题讨论】:
标签: nhibernate
在 NHibernate 中有没有办法从非代理模型开始
var m = new Model() { ID = 1 };
m.Name = "test";
//Model also has .LastName and .Age
现在保存这个模型只更新名称而不先从会话中选择模型?
【问题讨论】:
标签: nhibernate
如果模型除了名称还有其他属性,你需要用数据库中的原始值初始化这些,除非它们被设置为空。
您可以使用HQL update operations;我自己从未尝试过。
您也可以使用本机 SQL 语句。 ("Update model set name ...")。
通常不需要这种优化。在极少数情况下您需要避免选择数据,因此编写此 SQL 语句只是浪费时间。您正在使用 ORM,这意味着:编写面向对象的软件!除非你不会从中获得太多好处。
【讨论】:
Stefan 所说的看起来就像您需要的一样。请注意,这确实是一个边缘案例,除非您遇到一些超高性能问题,否则您应该对完全加载您的实体感到满意。
如果您只是不想访问数据库 - 尝试使用缓存 - 实体缓存非常简单高效。
如果您的实体是一个巨大的实体 - 即它包含一个 blob 或其他东西 - 考虑将其分成两部分(多对一,以便您可以利用延迟加载)。
【讨论】:
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);
【讨论】: