c#-处理旧版数据库时在NHibernate中建立多对一关系的最佳方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-处理旧版数据库时在NHibernate中建立多对一关系的最佳方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2585字,纯文字阅读大概需要4分钟。
内容图文
![c#-处理旧版数据库时在NHibernate中建立多对一关系的最佳方法?](/upload/InfoBanner/zyjiaocheng/883/0761e83e824643c9a488b7158b4a3984.jpg)
警告-我是NHibernate的新手.我知道这个问题似乎很简单-我敢肯定有一个简单的答案,但是我已经在这个问题上摸索了一段时间.我正在处理的是传统的db,它实际上不能在结构上进行更改.我有一个详细信息表,其中列出了客户已接受的付款计划.每个付款计划都有一个ID,该ID链接回到参考表以获取计划的条款,条件等.在我的对象模型中,我有一个AcceptedPlan类和一个Plan类.最初,我使用了从详细信息表到ref表的多对一关系在NHibernate中对该关系进行建模.我还创建了一对多关系,其关系从Plan类到AcceptedPlan类朝相反的方向发展.当我只是在读取数据时,这很好.我可以转到我的AcceptedPlan类的一个Plan对象,以读取该计划的详细信息.当我不得不开始向明细表中插入新行时,出现了我的问题.从我的阅读看来,创建新的子对象的唯一方法似乎是将其添加到父对象,然后保存会话.但是我不想每次想创建新的详细记录时都必须创建一个新的父Plan对象.这似乎是不必要的开销.有谁知道我是否以错误的方式进行此操作?
解决方法:
我要避免让子对象包含其逻辑父对象,这样做时,它很快就会变得非常混乱且非常递归.在进行此类操作之前,我将先看看您打算如何使用域模型.您仍然可以轻松地在表中保留ID引用,而无需对其进行映射.
这是两个示例映射,可能会向正确的方向推动您,我不得不调整表名等,但这可能会有所帮助.我可能还会建议将StatusId映射到枚举.
注意袋子有效地将详细信息表映射到集合中的方式.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class lazy="false" name="Namespace.Customer, Namespace" table="Customer">
<id name="Id" type="Int32" unsaved-value="0">
<column name="CustomerAccountId" length="4" sql-type="int" not-null="true" unique="true" index="CustomerPK"/>
<generator class="native" />
</id>
<bag name="AcceptedOffers" inverse="false" lazy="false" cascade="all-delete-orphan" table="details">
<key column="CustomerAccountId" foreign-key="AcceptedOfferFK"/>
<many-to-many
class="Namespace.AcceptedOffer, Namespace"
column="AcceptedOfferFK"
foreign-key="AcceptedOfferID"
lazy="false"
/>
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class lazy="false" name="Namespace.AcceptedOffer, Namespace" table="AcceptedOffer">
<id name="Id" type="Int32" unsaved-value="0">
<column name="AcceptedOfferId" length="4" sql-type="int" not-null="true" unique="true" index="AcceptedOfferPK"/>
<generator class="native" />
</id>
<many-to-one
name="Plan"
class="Namespace.Plan, Namespace"
lazy="false"
cascade="save-update"
>
<column name="PlanFK" length="4" sql-type="int" not-null="false"/>
</many-to-one>
<property name="StatusId" type="Int32">
<column name="StatusId" length="4" sql-type="int" not-null="true"/>
</property>
</class>
</hibernate-mapping>
内容总结
以上是互联网集市为您收集整理的c#-处理旧版数据库时在NHibernate中建立多对一关系的最佳方法?全部内容,希望文章能够帮你解决c#-处理旧版数据库时在NHibernate中建立多对一关系的最佳方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。