【问题标题】:NHibernate HBM: Are there default discriminator values?NHibernate HBM:是否有默认的鉴别器值?
【发布时间】:2016-12-10 02:54:30
【问题描述】:

在使用 HBM 映射文件的 .NET 应用程序中,实体通过继承被拆分为两个,从而创建了一个鉴别器列来映射新类。 该列是用一个空值创建的,有没有办法为鉴别器指示一个默认值,以便它们已经指向一个特定的类?

谢谢!

【问题讨论】:

    标签: .net nhibernate


    【解决方案1】:

    如果你的基类不是抽象的......实例化是有意义的 - 它也可以有一个鉴别器值。然后我们将它应用到类元素上

    <class name="Cat" table="CATS" discriminator-value="C">
    

    检查一下:

    5.1. Mapping declaration

    示例 sn-p

    <?xml version="1.0"?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Eg"
        namespace="Eg">
    
            <class name="Cat" table="CATS" discriminator-value="C">
                    <id name="Id" column="uid" type="Int64">
                            <generator class="hilo"/>
                    </id>
                    <discriminator column="subclass" type="Char"/>
                    ...
                    <subclass name="DomesticCat" discriminator-value="D">
    

    【讨论】:

    • 这似乎很有趣,但是旧类被拆分为一个基本的 abstract 类和另外两个具体的类,我希望一个作为空值的默认类.
    • 想想吧……这没有意义。 NHibernate 为您提供的 - 是合理的。调整你的逻辑以遵循一个事实:抽象类......没有默认的鉴别器。每个孩子都有自己的价值,这将是默认值。我强烈建议,不要尝试在这里发明轮子。它是有效且经过验证的概念
    • 我想我可能打错了,所以我将给出一个更字面的例子......不要在这里重新发明轮子......我有一个抽象类(没有鉴别器值),继承 A (鉴别器“A”)和继承B(鉴别器“B”)。但是由于表已经有值,并且将添加一个带有空值的新列作为鉴别器,我想知道是否有办法将所有具有空值的记录指向继承 A。这是否存在?如果不是,我可以执行解决方法。谢谢!
    • 看,这种DB操作是标准的。并且架构更改(ADD COLUMN)必须后跟UPDATE(插入默认值)。或者使用 MS SQL Server like,您可以轻松地为约束提供默认值 ADD ... DEFAULT('ABC')... 无论如何。那只是关于数据库方面。更改只需要.. 模式结束数据更新。它不能移动到 NHiberante。希望这个对你有帮助。祝 NHibernate 好运
    • 是的,这就是我要做的。只是认为会有一种方法通过映射并决定询问。谢谢!
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多