我正在使用按以下方式映射的域模型:
- IProxy 合约(包括 Id)
- 实现合约的实体类
例子:
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 还是应该使用我的 Entity 类型?