给定下面的类定义:
public class Order {
public IProduct Product {get;set;}
}
我有这个(流利)映射
References(x=>x.Product, "ProductId");
而得到这个异常:从表中订单的关联是指未映射类,这是有道理的,因为它不知道我会传递给它什么样的实现。
我明白我为什么要定义的映射类型(IProduct可以是任何东西),但我不知道该怎么做。
谢谢,
凯尔
给定下面的类定义:
public class Order {
public IProduct Product {get;set;}
}
我有这个(流利)映射
References(x=>x.Product, "ProductId");
而得到这个异常:从表中订单的关联是指未映射类,这是有道理的,因为它不知道我会传递给它什么样的实现。
我明白我为什么要定义的映射类型(IProduct可以是任何东西),但我不知道该怎么做。
谢谢,
凯尔
尝试映射接口IProduct
而不是具体类的Product
。 (请注意,我说的不是映射Product
类的字段Order
。)
我想,你要寻找的是.References<Product>(x=>x.Product, "ProductId");
顺便提及的同样如此.HasMany<>
这似乎有一样的效果<... class="Product" />
在XML
我不会建议映射接口,因为它打破了使用一个整点 - 你一旦遇到问题,因为它开始实施IStorable和NH不能与多重继承处理。
你可以映射界面 - >实现关系,继承关系,使用适当的继承模型。
这将意味着映射IProduct,然后使用表每层次创造产品在IProduct映射一个子类的地图,例如。
这也将让你的产品类,它是不是IProduct接口的一部分映射额外的数据,也让如果你想你映射以同样的方式附加IProduct实现。
我一直在努力改进以流利的代理接口的支持。 有一对夫妇连接到问题256和257有用的补丁,但他们真正需要的一切手动指定。 我已经采取了这些更进一步,增加了从所推断的(这将是代理),设置代理服务器和改变类型的引用到下面的映射类的支持,并增加了一个新的约定(ProxyConvention),自动设置这一切 - 只是一个功能,它实例从一个映射类派生的代理接口,并应采取其他的事情。
此刻的一个漏洞是,它不能拿起的.hbm.xml文件中明确指定的任何定义。
补丁安装到发行256