NHibernate 3.3.2.4 (Not Fluent)를 사용하고 있습니다 ... 데이터베이스 모델을 응용 프로그램 모델에 매핑하려고하고 있습니다.데이터베이스를 내 모델에 어떻게 매핑합니까?
I이 (간결 간체) 다음과 같은 데이터베이스 구조 :
LibraryItems
------------
Id UniqueIdentifier Primary Key,
UserId UniqueIdentifier Foreign Key References Users(UserId),
Type SmallInt, --Book, Magazine etc.
ProductId UniqueIdentifier --Links to UserBooks When Type = 1
-- UserMagazines When Type = 2
UserBooks
---------
ProductId UniqueIdentifier Unique Foreign Key References Books(Id),
--Other fields pertaining to books
UserMagazines
-------------
ProductId UniqueIdentifier Unique Foreign Key References Magazines(Id),
--Other fields pertaining to magazines
UserBookmarks
-------------
Id UniqueIdentifier Primary Key,
LibraryItemId UniqueIdentifier Foreign Key References LibraryItems(Id),
BookmarkLocation NVarChar(100)
나는 또한 다음과 같은 응용 프로그램 모델
public enum LibraryItemType
{
Book = 1,
Magazine = 2
}
public abstract class LibraryItem
{
public Guid Id { get; set; } //ProductId
public Guid UserId { get; set; }
abstract public LibraryItemType Type { get; }
}
public abstract class ReadableLibraryItem : LibraryItem
{
public Bookmark CurrentPosition { get; set; }
}
public class UserBook : ReadableLibraryItem
{
public override LibraryItemType Type { get { return LibraryItemType.Book; } }
//Other properties pertaining to books
}
public class UserMagazine : ReadableLibraryItem
{
public override LibraryItemType Type { get { return LibraryItemType.Magazine; } }
//Other properties pertaining to magazines
}
나는에서 매핑하는 방법으로 손해를보고 완전히 생각을 가지고 응용 프로그램 모델에 내 데이터베이스의 데이터 모델 ... 지금까지 내가 가지고 :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update"
assembly="Model"
namespace="Model.Library"
default-lazy="false" xmlns="urn:nhibernate-mapping-2.2">
<class name="LibraryItem" table="LibraryItems" optimistic-lock="version">
<id name="Id" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="assigned"/>
</id>
<discriminator column="Type" type="Int32" />
<property name="UserId" type="Guid" not-null="true" />
<property name="ProductId" type="Guid" not-null="true" />
<property name="Type" type="Model.Library.LibraryItemType, Model" not-null="true" />
<joined-subclass name="ReadableLibraryItem">
<one-to-one name="CurrentPosition" type="Model.Library.Bookmark" class="Bookmark" property-ref="LibraryItemId" />
<joined-subclass name="UserBook" table="UserBooks" lazy="false" discriminator-value="1">
<key column="Id" />
</joined-subclass>
<joined-subclass name="UserMagazineIssue" table="UserMagazineIssues" lazy="false" discriminator-value="2">
<key column="Id" />
</joined-subclass>
</joined-subclass>
</class>
</hibernate-mapping>
내 문제는 두 가지로 보입니다.
- 내 응용 프로그램 모델의 내 하위 유형 UserBooks 및 UserMagazines은 실제로 SubTypes of SubTypes이며 내 hbm 파일에서이를 모델링하는 방법을 알지 못합니다.
- discriminator는 LibraryItems 테이블에 있지만 하위 하위 클래스에 적용됩니다.