我无法在标题中清楚地表达我想要的内容,但基本上这可能吗?
public class Employee {
public Address address;
...
public class address {
...
非常简单的对象模型,具有Address对象属性的Employee。在NHibernate中,当映射它时会产生类似的东西:
table Employee
EmployeeId
AddressId
...
table Address
AddressId
...
所以到目前为止这一切都很好,我的Employee表有一个到Address表的外键列,非常完美。我想要的是当我使用NHibernate获取它不会加入该表并填充Address对象,而是实例化Address对象并仅填充AddressId属性。
在我得到关于NHibernates延迟加载的大量响应之前,我已经知道了。这更像是“有可能”而不是“这是一个好主意”因为我确信它可能不是。我只想看看NHibernate的灵活性。
答案 0 :(得分:4)
一种方法是将AddressId
公开为Employee
类中的完全映射项。这样您就可以从以下地址获取AddressId: -
Employee.AddressId
但是说,如果您只是从以下位置获取ID,则不会加载任何内容或将额外的选择发送到数据库: -
var addressId = Employee.Address.Id
答案 1 :(得分:1)
这对我来说没有多大意义,因为你已经将AddressId作为对Adress的引用,所以实例化对象只是为了给你这个,似乎没必要。但是,也许你想要这样的东西:http://ayende.com/blog/4378/nhibernate-new-feature-no-proxy-associations
编辑后,评论:此外,像地址这样的东西可以映射为组件,也许这将有助于您的要求。看到此链接和谷歌开始使用:http://ayende.com/blog/3937/nhibernate-mapping-component
答案 2 :(得分:0)
也许我误解了这个问题,但你要求的是NHibernate延迟加载是如何工作的。如果您获得Employee实例,则该地址将是AddressId设置的Address的代理。访问除AddressId之外的任何属性将导致NHibernate获取地址记录。