小编Mat*_*der的帖子

NHibernate:为什么要使用<composite-element>而不是<one-to-many>来映射集合

使用NHibernate时,在什么情况下你会选择使用复合元素映射集合来提供值对象的集合,而不是创建一个完整的实体并使用一对多映射它?

您可能有一个值类型类'PostalAddress'来表示地址.如果您有一个人实体,并且每个人可以拥有许多地址,您可以像这样映射这种关系(选项1):

<bag name="Addresses" table="PersonAddress">
    <key column="PersonID"/>
    <composite-element class="PostalAddress">
        <property name="StreetAddress"/>
        <property name="Town"/>
        <property name="City"/>
        <property name="Postcode"/>
    </composite-element>
</bag>
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个实体"PersonAddress",其上有一个"PostalAddress"类型的属性,并使用一对多关联映射地址(选项2):

<bag name="Addresses">
    <key column="PersonID"/>
    <one-to-many class="PersonAddress"/>
</bag>

<class name="PersonAddress">

    <id name="Id">
        <generator class="native"/>
    </id>

    <component name="Address" class="PostalAddress">
        <property name="StreetAddress"/>
        <property name="Town"/>
        <property name="City"/>
        <property name="Postcode"/>
    </component>

</class>
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不做选项1?PersonAddress表有ID列的事实是否应该是一个实体本身,因此使用选项2?

nhibernate nhibernate-mapping

8
推荐指数
1
解决办法
3739
查看次数

从SQL Server中的多表连接生成XML

给定具有父表和两个或更多子表的数据库模式.例如:

数据库图

是否可以使用for xml语句创建一个输出以下XML的查询:

<?xml version="1.0"?>
<person>
    <name>Joe Bloggs</name>
    <age>25</age>
    <address>
        <streetAddress>123 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A12 3BC</postcode>
    </address>
    <address>
        <streetAddress>124 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A12 3BC</postcode>
    </address>
    <contact>
        <type>Home Phone</type>
        <value>01234 567890</value>
    </contact>
    <contact>
        <type>Work Phone</type>
        <value>01987 654321</value>
    </contact>
    <contact>
        <type>Email Address</type>
        <value>joe@example.com</value>
    </contact>
</person>
Run Code Online (Sandbox Code Playgroud)

我最初的尝试:

select person.name, person.age,
        address.streetAddress, address.town, address.postcode,
        contact.type, contact.value
    from Person as person
        left join Address as address on person.PersonID = address.PersonID
        left join Contact as contact on person.PersonID = contact.PersonID
    where person.PersonID …
Run Code Online (Sandbox Code Playgroud)

xml sql-server join

3
推荐指数
1
解决办法
8685
查看次数

标签 统计

join ×1

nhibernate ×1

nhibernate-mapping ×1

sql-server ×1

xml ×1