禁用更新子类的可能性

本文关键字:可能性 子类 更新 | 更新日期: 2023-09-27 18:18:04

我正在开发fluent 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有这种特性吗?它有意义吗?

编辑:附加说明我想做这样的事情的原因是,在我的系统(asp mvc应用程序),我们有两个不同的地方,我们管理objectsA和objectsB。首先我们创建对象A,然后我们想要将对象A"转换"为对象b。然后我们可以在两个不同的模块中编辑这两个对象。

我编辑objectB的流程:从数据库中读取objectB,并将其转换为视图模型

我不想为对象A的数据扩展对象b的视图模型,将这些数据存储在一些隐藏字段中并从视图模型转换。

我认为如果可以标记这个数据不能被Session.SaveorUpdate(objectB)更新,它将解决我的问题。这就是我的问题

禁用更新子类的可能性

尝试查看文档:

  • 5.1.3。类

小引用:

<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应该在运行时生成,并且只包含值不为空的列。

我们可以看到的是设置"dynamic-update"只更新被修改过的属性

这将是学习NHibernate只向ObjectB发出更新的最原生的方式…如果ObjectA定义的属性没有变化。

但是一般来说:把它留在NHibernate上。它所做的,很可能是我们所需要的最好的……这是一个成熟的工具

扩展

基于问题扩展 -我会说:这样做…没有。

使用ORM工具,如果您的模型,业务领域模型,保持尽可能简单的,您将获得很多。NHibernate可以提供很多帮助,例如:
  • 选择全部或仅部分属性-称为投影
  • 分页
  • 排序
  • WRITE操作级联

但是它不会帮助您管理"意外的"或"异常的"领域模型设计。

请阅读:

    复合/继承

继承上的组合(或复合重用原则)是面向对象编程中的一种技术,通过这种技术,类可以通过包含实现所需功能的其他类而不是通过继承来实现多态行为和代码重用…