jos*_*wer 5 nhibernate nhibernate-mapping
我遇到的问题(我认为)应该很简单,但找不到任何明确的信息.
在我有三个表的情况下,描述一个人可以拥有多个作业的域:
人 - 有PersonId,姓名
工作 - 有JobId,JobName
PersonJob - 有PersonId,JobId,YearsOfEmployment
注意:在我的对象模型中,我有表示每个表的实体.我有第三个实体代表人/工作关系,因为那里有有用的元数据(YearsOfEmployment),而不仅仅是一个简单的连接表.
所以,如果我知道PersonId和JobId,有没有一种简单的方法让我使用会话并返回一个匹配那些ID的对象?
或者,换一种方式,因为我已经知道主键是有一种脑死亡,简单的方法,我可以将SQL"SELECT YearsOfEmployment from PersonJob WHERE PersonId = 1 AND JobId = 1"转换为:
var keys = new {PersonId=1, JobId=2};
PersonJob obj = Session.Get<PersonJob>(keys);
顺便说一句:地图看起来像这样:
<class name="Person" table="dbo.Person" lazy="true">
<id name="PersonId">
<generator class="native"/>
</id>
<property name="Name"/>
</class>
<class name="Job" table="dbo.Job" lazy="true">
<id name="JobId">
<generator class="native"/>
</id>
<property name="JobName"/>
</class>
<class name="PersonJob" table="dbo.PersonJob" lazy="true">
<composite-id>
<key-property name="PersonId"></key-property>
<key-property name="JobId"></key-property>
</composite-id>
<property name="YearsOfEmployment"/>
</class>
Run Code Online (Sandbox Code Playgroud)
好吧,我回答了我自己的问题.我认为发布你的问题几乎就像和某人说话一样.如果我要将PersonJob的composite-id作为组件或类,即
<class name="PersonJob" table="dbo.PersonJob" lazy="true">
<composite-id name="PersonJobKey" class="PersonJobKey">
<key-property name="PersonId"></key-property>
<key-property name="JobId"></key-property>
</composite-id>
</class>
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
PersonJobKey key = new PersonJobKey() { PersonId = 1, JobId = 1 };
PersonJob obj = Session.Get<PersonJob>(key);
int yearsOfEmployment = obj.YearsOfEmployment;
Run Code Online (Sandbox Code Playgroud)
凉.希望这可以帮助其他人搞清楚......
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |