保存子类时,NHibernate会向基类插入两次。违反唯一约束

时间:2012-08-19 23:40:58

标签: nhibernate fluent-nhibernate

我使用流畅的oracle db和devart Entity Developer来生成映射和实体类。

我有一个基表Product,它有几个子类,包括Tour。保存Tour时,nhibernate会向Product表发出2个相同的插入,这些插入违反了PK唯一约束。

产品映射是:

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Schema("CT_PRODUCTS");
        Table("PRODUCT");
        OptimisticLock.None();
        LazyLoad();
        CompositeId()
            .KeyProperty(x => x.Season, set =>
            {
                set.Type("CT.DomainKernel.Enums.Season,CT.DomainKernel");
                set.ColumnName("SEASON");
                set.Access.Property();
            })
            .KeyProperty(x => x.ProductCode, set =>
            {
                set.ColumnName("PROD_CODE");
                set.Length(10);
                set.Access.Property();
            });
        Map(x => x.Name)
            .Column("NAME")
            .Access.Property()
            .Generated.Never()
            .CustomSqlType("VARCHAR2")
            .Length(200);
        HasOne(x => x.Tour)
            .Class<Tour>()
            .Access.Property()
            .Cascade.SaveUpdate()
            .LazyLoad();
    }
}

巡回赛地图是:

public class TourMap : SubclassMap<Tour>
{
    public TourMap()
    {
        Schema("CT_PRODUCTS");
        Table("TOUR");
        LazyLoad();
        KeyColumn("SEASON");
        KeyColumn("PROD_CODE");
        Map(x => x.Duration)
            .Column("DURATION")
            .Access.Property()
            .Generated.Never()
            .CustomSqlType("NUMBER")
            .Not.Nullable()
            .Precision(3);
        HasOne(x => x.Product)
            .Class<Product>()
            .Access.Property()
            .Cascade.SaveUpdate()
            .LazyLoad()
            .Constrained();
    }
}

游览实体类:

public partial class Tour2 : Product
{
    public virtual Product Product
    {
        get
        {
            return this._Product;
        }
        set
        {
            this._Product = value;
        }
    }
}

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:0)

解决这个问题的方法是从Tour to Product中删除Property引用,从Product to Tour中删除属性引用,无论如何,这无论如何都没有意义。