2015-08-04 5 views
0

У меня есть следующая ситуация, которая при первом взгляде - это много-много случаев.Nhibernate xml сопоставление с таблицами отношений

TABLE TExam 
(
    IdExam 
    ... 
) 

TABLE TExamContent 
(
    IdExam, 
    IdContent 
) 

TABLE TContent 
(
    IdContent, 
    ... 
) 

Но мне нужен таблица TExamContent только потому, что таблица TContent это вложение всей системы, так что я не могу поставить внешний ключ TExam на нем.

Для этих таблиц у меня есть (или я хочу) следующие классы, но я не нуждаюсь в содержании, содержащем список экзаменов. На самом деле, у моего контента будет только один Экзамен (это обходное решение, которое я не могу изменить)

Как сопоставить эти таблицы с этими классами, чтобы у моего класса Экзамена есть Список содержимого, например?

public class Exam 
    { 
     public int IdExam{get;set;} 
     public IList<Content> ContentList { get; set; } 
    } 

    public class Content 
    { 
     IdContent, 
     ... 
    } 

Я думаю, что если я не могу этого сделать, мне нужно сделать следующее, не так ли?

public class Exam 
{ 
    public int IdExam{get;set;} 
    public IList<ExamContent> IdExam{get;set;} 

} 

public class ExamContent 
{ 
    public int IdExam {get;set;}, 
    public int IdContent {get;set;} 
} 

public class Content{ 
    public int IdContent, 
    ... 
} 

В этом случае я хочу, чтобы мой класс ExamContent есть только ссылки на класс экзамен и содержание класса, а не его ключ, как следующее.

public class ExamContent 
{ 
    public Exam Exam {get;set;} 
    public Content Content {get;set;} 
} 

Как это сделать?

В настоящее время это мое отображение

<class name="MedicalCertificateContent" lazy="true" table="TExamContent"> 

    <composite-id> 
     <key-property name="IdExam" type="Int32"> 
     <column name="IdExam" not-null="true" precision="10" scale="0" sql-type="int" /> 
     </key-property> 
     <key-property name="IdContent" type="Guid"> 
     <column name="IdContent" not-null="true" sql-type="uniqueidentifier" /> 
     </key-property> 
    </composite-id> 

    <many-to-one name="Content" class="Content" fetch="join" not-null="true" column="IdContent" lazy="proxy" /> 

    <many-to-one name="Exam" class="Exam" fetch="join" not-null="true" column="IdContent" lazy="proxy"/> 

    </class> 
</hibernate-mapping> 

Проблема делает это в том, что мне нужно, чтобы сохранить экзамен, чтобы добавить содержимое позже. Я хочу создать свой экзамен, добавить контент и сохранить все сразу.

ответ

0

Это простой способ для многих. Примерно так:

<class name="Exam" table="TExam"> 
    <id ...> 

    <bag name="ContentList" table="TExamContent"> 
    <key column="IdExam"/> 
    <many-to-many class="Content"> 
     <column name="IdContent"/> 
    </many-to-many> 
    </bag> 

</class> 

<class name="Content" table="TContent"> 
    <id ..> 

</class>