流畅的NHibernate将ClassMap Id和SubClassMap Id引入引用表?

时间:2010-05-21 18:45:46

标签: c# nhibernate fluent-nhibernate mapping

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的引用。

有什么想法吗?

由于 安迪

1 个答案:

答案 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”,并且没有发现适当的列已经存在。