代码之家  ›  专栏  ›  技术社区  ›  Sir Rippov the Maple

归一化后的NHibernate映射

  •  0
  • Sir Rippov the Maple  · 技术社区  · 17 年前

    请帮帮我-我是NHibernate的新手,我似乎找不到我要找的东西。

    我在数据库中有两个表: Fund FundBalance 基金 可以有很多 FundBalances 累积额 只有一个 .

    在C#中,只有 累积额 表与中的列联接 累积额 累积额

    基金 表包含 FundName 财产和 累积额 表包含 AvailableBalance 基金名称 有效平衡 累积额

    问题是:我如何处理NHibernate?奖励:如何使用FluentNHibernate指定映射?

    我想到的一个解决方案是在数据库中创建一个视图,但如果映射可以完全使用NHibernate来完成,我更愿意这样做。

    6 回复  |  直到 17 年前
        1
  •  1
  •   Frederik Gheysels    17 年前

    正如我在评论中所问的那样;这个FundBalance类到底是什么样子的? 你能帮我做点什么吗 <join table> NHibernate映射中的元素?

    http://ayende.com/Blog/archive/2007/04/24/Multi-Table-Entities-in-NHibernate.aspx

        2
  •  1
  •   alexl    17 年前

    您不需要使用视图来解决问题。在FundBalance表上进行映射时,只需指定联接。 如果我的理解是好的,您希望您的FundBalance类更完整,并从Fund表中获得一些属性。

    试试这个:

    <class name="FundBalance" table="FundBalance" lazy="true">
            <id name="Id" column="FundBalanceId" unsaved-value="0">
                <generator class="native"/>
            </id>
    
            <property name="FundBalance" not-null="true" length="80"/>
    
            <join table="Fund">
                <key column="FundId"/>
                <property name="FundName"/>
            </join>
    </class>
    

    public class FundBalance
    {   
            private long _Id;
            public virtual long Id
            {
                get { return _Id; }
                set { _Id = value; }
            }
    
            private decimal _FundBalance;
            public virtual decimal FundBalance
            {
                get { return _FundBalance; }
                set { _FundBalance= value; }
            }
    
            private string _FundName;
            public virtual string FundName
            {
                get { return _FundName; }
                set { _FundName= value; }
            }
    }
    

    https://svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate.Test/Join/ http://ayende.com/Blog/archive/2007/04/24/Multi-Table-Entities-in-NHibernate.aspx

    我给你HBM映射文件,对于fluent nhibernate,我不知道你是否可以使用关键字JOIN,但基本上这是相同的问题。

    希望这有帮助。

        3
  •  0
  •   Jens Schauder    17 年前

    您没有基金类课程的原因是什么?我会重新考虑这是否真的明智。

    但是,如果您想继续使用该路径,subselect属性可能会有所帮助(很抱歉,我从Hibernate文档中得到的不是NHibernate,但我希望它们足够相似: http://www.hibernate.org/hib_docs/core/reference/en/html_single/#mapping-declaration-class )

    我认为这应该适用于选择、更新和删除。但是我不知道insert应该如何工作(独立于Hibernate),谁应该负责决定是否需要新的基金记录,或者在对象模型中没有正确表示基金表时更新一个(哪个?)。

        4
  •  0
  •   user68660    17 年前

    如果两个表都需要一个公共类,为什么不使用fa-ade模式呢?映射Fund和FundBalance通常,创建一个(未映射的)新类作为两个实体的接口。简单,不涉及任何“魔法”。

        5
  •  0
  •   Diego Jancic    17 年前

    如果你只需要阅读,而不需要在基金中书写,你可以使用公式。 例如:

        6
  •  -1
  •   Ewan Makepeace    17 年前

    这应该使用Hibernates对继承的支持来完成。Hibernate可以用几种不同的方式对相关类的族进行建模,但一种是用于基类的表,另一种是用于每个子类的表,以保存它们的附加属性。