我与已经通过以下方式被映射到其域模型的工作工作的正确方法:NHibernate的,与代理
- IProxy合同(包括身份证)
- 实体类实现合同
实施例:
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或者我应该用我的实体类型?
提供自己的代理接口的原因是什么? – cremor 2013-05-07 10:47:37
这不是问题 – Raffaeu 2013-05-07 12:37:32
提供自己的代理接口不是NHibernate代理的正常用法。如果我们知道你为什么这样做,我们可能会更好地帮助你。 – cremor 2013-05-08 06:01:28