0

我有这个类(去除其中的冗余信息后):如何映射一个实体entitycollection辞典功能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”列创建?我在映射中做了什么错误?

回答

0

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