繁体   English   中英

如何在流利的NHibernate中将实体映射到EntityCollection字典

[英]How to map an entity to entitycollection dictionary in fluent nhibernate

我有此类(从中删除了多余的信息之后):

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)
)

为什么“CategoryPropertyValues”“CategoryPropertyValueCollectionId”列创建? 我在映射中做错了什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM