给出了课程
public class Board {
public int Id { get; set; }
public int Player1Id { get; set; }
public Player player1 { get; set; }
}
和
public class Player {
public int Id { get; set; }
public string Name { get; set; }
}
在EF中如果我想将一个玩家(已经在数据库中)分配给我们可以执行的棋盘:
var board = new Board {
Player1Id = 2 //given that the player ID in the db is 2
}
这将创建关联,而无需将玩家实体从数据库中取出并直接分配它。因此,当下一次获得棋盘和玩家时,它将从数据库中返回玩家对象。
是否可以对NHibnerate做同样的事情?
答案 0 :(得分:1)
最好的方法(在所有尝试之后)..将使用 Load<TEntity>(id)
。
小引用:
...
Load()
返回一个未初始化的代理对象 在您调用对象的方法之前,实际上并未访问数据库。如果您想创建一个,这种行为非常有用 从一个对象关联而不实际加载它 数据库...
简而言之:这是本地NHibernate支持将ID转换为&#34;代理实例&#34;并提供映射参考。
可能会有一些自定义封装......例如上层(业务层)IReadFacade<out TEntity>
包含一些LoadById(id)
...
同时检查:NHibernate difference between Query<T>, Get<T> and Load<T>