![](/img/trans.png)
[英]How to map IDictionary<string, Entity> in Fluent NHibernate
[英]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.