我正在使用以下列方式映射的域模型:
示例:
public class Product : IProductProxy {}
使用以下逻辑映射类:
<class name="Product" table="[Products]" lazy="true" proxy="IProductProxy">
现在我发现以下方法正常工作:
var result = session.Load<IProductProxy >(1);
var result = session.Get<IProductProxy>(1);
var result = session.Get<Product>(1);
虽然这些方法抛出“代理异常”或“无效的强制转换异常”
var result = session.Load<Product>(1);
我需要知道的是,使用代理和NHibernate的正确方法是什么。例如,我虽然直接使用界面会很好,但是当我尝试这样做时:
// successful save
var result = session.Get<Customer>("ALFKI");
result.Name = "XXX";
session.Update(result);
// if error occurs I receive wrong exception
// cannot find mapping for ICustomerProxy ERROR
var result = session.Get<ICustomerProxy>("ALFKI");
result.Name = "XXX";
session.Update(result);
我应该总是转回IProxy还是应该使用我的实体类型?
答案 0 :(得分:1)
var result = session.Load<Product>(1);
无效。如果实体尚未在会话中,Load()
将返回代理。如果告诉NHibernate该实体类型的代理只需要实现Product
接口,NHibernate应该如何创建类型IProductProxy
的代理(继承类)?