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