HI,
我正在尝试映射以下实体:
public class Product {
public int ProductId { get; private set; }
public string Name { get; set; }
}
public class SpecialProduct : Product {
public ICollection<Option> Options { get; private set; }
}
public class Option {
public int OptionId { get; private set; }
}
以下映射:
public class ProductMap : ClassMap<Product> {
public ProductMap() {
Id( x => x.ProductId );
Map( x => x.Name );
}
public class SpecialProductMap : SubclassMap<SpecialProduct> {
public SpecialProductMap() {
Extends<ProductMap>();
HasMany( p => p.Options ).AsSet().Cascade.SaveUpdate();
}
}
public class OptionMap : ClassMap<Option> {
public OptionMap() {
Id( x => x.OptionId );
}
}
问题是我的表最终是这样的:
Product
--------
ProductId
Name
SpecialProduct
--------------
ProductId
Option
------------
OptionId
ProductId // This is wrong
SpecialProductId // This is wrong
应该只有一个ProductId和对SpecialProduct表的单引用,但我们得到“两个”ID和两个对SpecialProduct.ProductId的引用。
有什么想法吗?
由于 安迪
答案 0 :(得分:1)
感谢大家的反馈。
我想要的表格如下:
Product
--------
ProductId
Name
SpecialProduct
--------------
ProductId
Option
------------
OptionId
SpecialProductId // Which ends up being just product id, but the FK here is to SpecialtyProduct
我忘了在原始问题中将这一行添加到OptionMap类中:
public class OptionMap : ClassMap<Option> {
public OptionMap() {
Id( x => x.OptionId );
References( x => x.ParentOption );
}
}
如果我然后使用它,它可以按我的意愿工作:
public class OptionMap : ClassMap<Option> {
public OptionMap() {
Id( x => x.OptionId );
References( x => x.ParentOption ).Column( "SpecialProductId" ).Not.Nullable();
}
}
由于引用,看起来Fluent正在添加“ProductId”,并且没有发现适当的列已经存在。