0
我有一些問題試圖映射使用流利NHibernate的實體。流利的NHibernate:奇怪的列映射行爲
我有三個實體,像這樣:
public class Product
{
public virtual Guid Id { get; set; }
public virtual Category Category { get; set; }
public virtual Seller Seller { get; set; }
}
public class Seller
{
public virtual Guid Id { get; set; }
public virtual IList<Product> Products { get; set; }
}
public class Category
{
public virtual int Id { get; set; }
}
注意,類別用於其ID int類型,而其他類使用的GUID。
我的映射類是這樣的:
public sealed class ProductDbMap : ClassMap<Product>
{
public ProductDbMap()
{
Id(x => x.Id);
References(x => x.Seller)
.Not.Nullable();
References(x => x.Category, "Category")
.Nullable();
}
}
public sealed class SellerDbMap : ClassMap<Seller>
{
public SellerDbMap()
{
Id(x => x.Id);
HasMany(x => x.Products);
}
}
public sealed class CategoryDbMap : ClassMap<Category>
{
public CategoryDbMap()
{
Id(x => x.Id);
}
}
最後,我有以下的約定,指定參考ID列的命名方式:
public class ReferenceConventions : IReferenceConvention
{
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.ColumnName(target.Property.Name + "Id");
}
}
這裏是NHibernate的決定如何產生表格:
create table Product (
Id UNIQUEIDENTIFIER not null,
SellerId UNIQUEIDENTIFIER not null,
CategoryId INTEGER,
Seller_id UNIQUEIDENTIFIER,
primary key (Id)
)
create table Seller (
Id UNIQUEIDENTIFIER not null,
primary key (Id)
)
create table Category (
Id integer,
primary key (Id)
)
生成有幾個錯誤產品表:
- 「SellerId」列由於某種原因被複制;重複的列不遵循我的命名約定。
- 我想通過向參考方法提供一個「Category」的值來覆蓋「CategoryId」列的命名約定。但是,該表仍然使用該約定。
這是怎麼回事?