如何映射实体->;使用Fluent NHibernate的接口关系?
给定以下类定义:如何映射实体->;使用Fluent NHibernate的接口关系?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,给定以下类定义: public class Order { public IProduct Product {get;set;} } 我有这个(流畅的)映射 得到这个异常:来自表Orders的关联引用了一个未映射的类,这很有意义,因为它不知道我将传递给它什么实现 我理解为什么我必须在映射中定义类型(IPProduct可以是任何类型),但我不确定如何做 谢谢 Kyle尝试映射接口IProduct,而不是具体的类Product。(注意,我不是说映射类订单的产品字段)您可以使用适当的继承模型将接
public class Order {
public IProduct Product {get;set;}
}
我有这个(流畅的)映射
得到这个异常:来自表Orders的关联引用了一个未映射的类,这很有意义,因为它不知道我将传递给它什么实现
我理解为什么我必须在映射中定义类型(IPProduct可以是任何类型),但我不确定如何做
谢谢
Kyle尝试映射接口
IProduct
,而不是具体的类Product
。(注意,我不是说映射类订单的产品字段)您可以使用适当的继承模型将接口->实现关系映射为继承关系
这意味着映射IPProduct,然后在IPProduct映射中创建Product的子类映射,例如使用每个层次结构的表
这还可以让您映射产品类中不属于IPProduct接口的其他数据,如果您愿意,还可以让您以相同的方式映射其他IPProduct实现。我一直在努力改进Fluent中对代理接口的支持。问题256和257附带了几个有用的补丁,但它们确实需要手动指定的所有内容。我更进一步,添加了对设置代理和将引用类型从推断类(即代理)更改为底层映射类的支持,并添加了一个新约定(ProxyConvention)来自动设置它-只需使用从映射类派生代理接口的函数实例化它,剩下的就交给它了
目前的一个漏洞是,它无法获取.hbm.xml文件中明确指定的任何定义
该补丁附加到我想你要找的是.References(x=>x.Product,“ProductId”)代码>
顺便说一句,也是如此。HasMany
这似乎与xml中的
相同
我不建议映射到接口,因为它破坏了使用一个接口的全部意义-一旦它开始实现IStorable,您就会遇到问题,NH无法处理多重继承。感谢这个答案-我发现它非常有用,并且是我选择的方法操作,很好的调用,我改变了它,这是一个复制粘贴错误。
References(x=>x.Product, "ProductId");