0

我正在使用流利的 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;
        }
    }
}

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

4

1 回答 1

0

对此的解决方案是从 Tour 到 Product 以及从 Product 到 Tour 移除 Property 引用,这在考虑时无论如何都是没有意义的。

于 2012-08-20T00:37:55.627 回答