我正在用流利的nhibernate开发一个继承策略。一切正常,但我有一个问题。是否有可能通过子类禁用更新基本属性?
这是一个虚拟代码:
public class ObjectA
{
public virtual string StatusA { get; set; }
}
public class ObjectB : ObjectA
{
public virtual string StatusB { get; set; }
}
public class ObjectBMap : SubclassMap<ObjectB>
{
public ObjectBMap()
{
Map(x => x.StatusB);
}
}
当我更新objectB时,我不想更新StatusA。我想在更新ObjectA时更改状态A. nhibernate有这种功能吗?它有意义吗?
编辑:额外的explenation 我想做这样的事情的原因是,在我的系统(asp mvc应用程序)中,我们有两个不同的地方管理objectsA和objectsB。首先我们创建对象A,然后我们想要转换&#39;对象A到对象B.然后我们可以在两个不同的模块中编辑这两个对象。
我的编辑对象B的流程: - 从db中读取objectB,将其转换为viewmodel -post form from view,将视图数据从表单转换为objectB并在db。中更新。
我不想为对象A的数据扩展objectB的视图模型,将这些数据存储在一些隐藏的字段中并从视图模型转换。
我认为如果能够标记这些数据无法由Session.SaveorUpdate(objectB)更新,那么它将解决我的问题。基本上这就是我的问题。
答案 0 :(得分:1)
尝试检查文档:
小引用:
<class
name="ClassName" (1)
table="tableName" (2)
...
dynamic-update="true|false" (7)
dynamic-insert="true|false" (8)
...
...
(7)dynamic-update
(可选,默认为false):指定应在运行时生成UPDATE SQL,并且仅包含值已更改的列。
(8)dynamic-insert
(可选,默认为false):指定应在运行时生成INSERT SQL,并且仅包含值不为null的列。
我们可以看到的是设置"dynamic-update"
...这可以达到我们的预期:仅更新已更改的属性
如果ObjectA定义的属性没有变化,这将是学习NHibernate仅向ObjectB发布更新的最原生方式。
但总的来说:简单地把它留给NHibernate吧。它的作用很可能是我们应该要求的最好的......它是一个成熟的工具
EXTEND
根据扩展的问题 - 我会说:不就这样......不要。
使用ORM工具,如果您的模型,业务领域模型保持尽可能简单,您将获得很多收益。 NHibernate可以帮助很多东西,例如:
但它不会帮助你管理&#34;意外&#34;或&#34;例外&#34;领域模型设计。
请阅读:
面向对象编程中的继承构成 (或复合重用原则)是一种技术,通过包含实现的其他类,类可以实现多态行为和代码重用所需的功能,而不是通过继承......