0

我正在使用按以下方式映射的域模型:

  • 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 类型?

4

1 回答 1

2

var result = session.Load<Product>(1);不能工作。Load()如果实体尚未在会话中,则返回代理。Product如果您告诉 NHibernate 该实体类型的代理只需要实现接口,NHibernate应该如何创建类型的代理(继承类)IProductProxy

于 2013-05-08T06:03:48.037 回答