使用功能NHibernate>接口关系 - 你如何映射实体?(How do you map a

2019-06-23 18:45发布

给定下面的类定义:

public class Order {
  public IProduct Product {get;set;}
}

我有这个(流利)映射

References(x=>x.Product, "ProductId");

而得到这个异常:从表中订单的关联是指未映射类,这是有道理的,因为它不知道我会传递给它什么样的实现。

我明白我为什么要定义的映射类型(IProduct可以是任何东西),但我不知道该怎么做。

谢谢,

凯尔

Answer 1:

尝试映射接口IProduct而不是具体类的Product 。 (请注意,我说的不是映射Product类的字段Order 。)



Answer 2:

我想,你要寻找的是.References<Product>(x=>x.Product, "ProductId");

顺便提及的同样如此.HasMany<>

这似乎有一样的效果<... class="Product" />在XML

我不会建议映射接口,因为它打破了使用一个整点 - 你一旦遇到问题,因为它开始实施IStorable和NH不能与多重继承处理。



Answer 3:

你可以映射界面 - >实现关系,继承关系,使用适当的继承模型。

这将意味着映射IProduct,然后使用表每层次创造产品在IProduct映射一个子类的地图,例如。

这也将让你的产品类,它是不是IProduct接口的一部分映射额外的数据,也让如果你想你映射以同样的方式附加IProduct实现。



Answer 4:

我一直在努力改进以流利的代理接口的支持。 有一对夫妇连接到问题256和257有用的补丁,但他们真正需要的一切手动指定。 我已经采取了这些更进一步,增加了从所推断的(这将是代理),设置代理服务器和改变类型的引用到下面的映射类的支持,并增加了一个新的约定(ProxyConvention),自动设置这一切 - 只是一个功能,它实例从一个映射类派生的代理接口,并应采取其他的事情。

此刻的一个漏洞是,它不能拿起的.hbm.xml文件中明确指定的任何定义。

补丁安装到发行256



文章来源: How do you map an entity -> interface relationship using Fluent NHibernate?