0 collections nhibernate composite
我有下表:
Bucket(
bucketId smallint (PK)
name varchar(50)
)
BucketUser(
UserId varchar(10) (PK)
bucketId smallint (PK)
)
Run Code Online (Sandbox Code Playgroud)
复合键不是问题,我知道如何解决这个问题,但我希望我的存储桶类可以连接一个IL的BucketUser.我阅读了在线参考资料,并认为我已经破解了它但没有.这两个映射在下面
- 水桶 -
<class name="Bucket,Impact.Dice.Core" table="Bucket">
<id name="BucketId" column="BucketId" type="Int16" unsaved-value="0">
<generator class="native"/>
</id>
<property column="BucketName" type="String" name="BucketName"/>
<bag name="Users" table="BucketUser" inverse="true" generic="true" lazy="true">
<key>
<column name="BucketId" sql-type="smallint"/>
<column name="UserId" sql-type="varchar"/>
</key>
<one-to-many class="Bucket,Impact.Dice.Core" not-found="ignore"/>
</bag>
</class>
Run Code Online (Sandbox Code Playgroud)
- bucketUser -
<class name="BucketUser,Impact.Dice.Core" table="BucketUser">
<composite-id>
<key-many-to-one name="BucketUser" class="Bucket,Impact.Dice.Core" column="BucketId"/>
<key-property name="UserId" column="UserId" type="string"></key-property>
</composite-id>
</class>
Run Code Online (Sandbox Code Playgroud)
密钥是包含实体的外键,而不是主键.
您有两种选择:
Bucketuser是一个独立的实体.它有自己的映射定义,您可以使用一对多引用它.你得到一个复合键,但我会避免这种情况.
<!-- reference to BucketUser. There is not table attribute needed. -->
<bag name="Users" inverse="true" generic="true" lazy="true">
<key>
<!-- foreign key -->
<column name="BucketId" sql-type="smallint" />
</key>
<one-to-many class="Bucket,Impact.Dice.Core" not-found="ignore"/>
</bag>
<!-- BucketUser mapped as an independent entity -->
<class name="BucketUser" ... >
<!-- here is the composite id, try to avoid this -->
<composite-id>
<key-property name="BucketId">
<key-property name="UserId">
</composite-id>
</bag>
Run Code Online (Sandbox Code Playgroud)
Bucketuser是Bucket的一个依赖部分.Bucket的外键同时是主键:
<!-- The table is defined on the fly by the table attribute -->
<bag name="Users" table="BucketUser" inverse="true" generic="true" lazy="true">
<key>
<column name="BucketId" sql-type="smallint" />
</key>
<!-- use composite-element to define the contents of the table -->
<composite-element>
<!-- define the contents of the BucketUser here -->
<property name="UserId" sql-type="varchar"/>
</composite-element>
</bag>
Run Code Online (Sandbox Code Playgroud)
这取决于你的情况哪种策略是合适的.
归档时间: |
|
查看次数: |
6287 次 |
最近记录: |