如何在一个流畅的nhibernate中将实体映射到entitycollection字典

时间:2013-04-25 00:06:55

标签: c# nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有这些类(从中删除冗余信息后):

public class Category : BaseEntity
{
    public virtual Category ContainingCategory { get; set; }
    public virtual IList<CategoryProperty> Properties { get; set; }
}

public class CategoryProperty : BaseEntity
{
    public virtual string Name { get; set; }
    public virtual IList<CategoryPropertyValue> Values { get; set; }
}

public class CategoryPropertyValue : BaseEntity
{
    public virtual string Name { get; set; }
}

public class CategoryPropertyValueCollection : BaseEntity
{
    public virtual IList<CategoryPropertyValue> Values { get; set; }
}

public class Product : BaseEntity
{
    public virtual string Name { get; set; }
    public virtual Category ContainingCategory { get; set; }
    public virtual IDictionary<CategoryProperty, CategoryPropertyValueCollection> Properties { get; set; }
}

这些是我的映射(再次删除冗余信息后):

public class CategoryMap : BaseMap<Category>
{
    public CategoryMap()
    {
        Map(x => x.Name);
        HasMany(x => x.Properties);
    }
}

public class CategoryPropertyMap : BaseMap<CategoryProperty>
{
    public CategoryPropertyMap()
    {
        Map(x => x.Name);
        HasMany(x => x.Values);
    }
}

public class CategoryPropertyValueMap : BaseMap<CategoryPropertyValue>
{
    public CategoryPropertyValueMap()
    {
        Map(x => x.Name);
    }
}

public class CategoryPropertyValueCollectionMap : BaseMap<CategoryPropertyValueCollection>
{
    public CategoryPropertyValueCollectionMap()
    {
        HasMany(x => x.Values).Cascade.None();
    }
}

public class ProductMap : BaseMap<Product>
{
    public ProductMap()
    {
        Map(x => x.Name);
        HasMany(x => x.Properties).AsEntityMap();
    }
}

我的映射出了问题,我很容易看到我想要完成的事情(ebay将是这种逻​​辑的一个很好的例子 - 来自具有不同属性和可能值的类别的产品过滤)。这就是我得到的表格(这些表格并不好):

create table Categories (
    Id INT IDENTITY NOT NULL,
   Name NVARCHAR(255) null,
   ContainingCategoryId INT null,
   primary key (Id)
)

create table CategoryProperties (
    Id INT IDENTITY NOT NULL,
   Name NVARCHAR(255) null,
   CategoryId INT null,
   primary key (Id)
)

create table CategoryPropertyValueCollections (
    Id INT IDENTITY NOT NULL,
   ProductId INT null,
   CategoryProperty_id INT null,
   primary key (Id)
)

create table CategoryPropertyValues (
    Id INT IDENTITY NOT NULL,
   Name NVARCHAR(255) null,
   CategoryPropertyId INT null,
   CategoryPropertyValueCollectionId INT null,
   OrderItemId INT null,
   CategoryProperty_id INT null,
   primary key (Id)
)

为什么&#39; CategoryPropertyValues &#39;使用&#39; CategoryPropertyValueCollectionId &#39;创建柱?我在映射中做错了什么?

1 个答案:

答案 0 :(得分:0)

发现我的问题是使用 HasMany 而不是 HasManyToMany