我有不同种类的产品。现在,AppProduct有不同种类的数量 - 多重的价值,值列表等..流利NHibernate:子类内的子类
public class Product : Entity
{
}
public class Quantity: Entity
{
}
public class ListQuantity : Quantity
{
public virtual IList<int> Quantities { get; set; }
}
public class MultiplierQuantity : Quantity
{
public virtual int Multiplier { get; set; }
}
public class AppProduct : Product
{
public virtual Quantity Quantity { get; set; }
}
的问题是:是否有可能与映射FNH或NH呢?特别是与自动映射。对我来说,将产品映射到他们自己的表中是很自然的事,但数量将会是AppProducts表的一部分......这是歧视性的。
我尝试了不同的子类,JoinedSubclass等方法,但都没有运气,每个方法都有不同的NH例外。它仅在两个层次结构默认与连接的子类进行映射时才起作用。但是,automapper不能自动映射IList [int]。如果我设置IList [产品](测试),一切正常。如果我尝试使用这个映射保持的IList [INT]:
public class ListQuantityMap : IAutoMappingOverride<ListQuantity>
{
public void Override(AutoMap<ListQuantity> mapping)
{
mapping.HasMany(x => x.Quantities).AsElement("QuantitiesId");
}
}
如果失败, System.Xml.Schema.XmlSchemaValidationException:元素命名空间“类的“瓮:NHibernate的映射 - 2.2”无效名字空间'urn:nhibernate-mapping-2.2'中的子元素'bag'。在名字空间'urn:nhibernate-mapping-2.2'中,预期可能的元素列表:'meta,subselect,cache,synchronize,comment,tuplizer,id,composite-id'。
虽然导出的Orders.Core.Quantity.hbm.xml中的唯一区别是一对多的类类型...即NHibernate不抱怨在几乎相同的映射袋。
(注意:这可能是一个在最近的FNH中已修复的问题,问题#299)。
无论如何,加入子类并不是完美的解决方案。我甚至考虑在AppProduct中只做组件,并在分配属性“QuantityType”时自己创建适当的数量对象......但这太奇怪了。或者,也许切换到Linq2Sql将有所帮助? ;-)
如果您包含试图将此模型映射到的数据库模式,可能会有所帮助。如果没有它,我很难理解你的意图。 – 2009-08-29 00:06:47
我没有任何模式,它是基于实体和FNH生成的映射生成的。所以它可以是任何你喜欢的。此外,手动HasMany异常的问题是最近FNH修订版中修复的错误(插入到所有子类中)。 – queen3 2009-08-31 07:58:22