C# Fluent NHibernate未自动映射基类中的一对多属性

C# Fluent NHibernate未自动映射基类中的一对多属性,c#,fluent-nhibernate,automapping,C#,Fluent Nhibernate,Automapping,假设我有一个抽象基类,定义如下: public abstract class CompanyBase : EntityBase<CompanyBase> { public virtual string Name { get; set; } public virtual StreetAddress Address { get; set; } public virtual IEnumerable<PhoneNumber> PhoneNumbers {

假设我有一个抽象基类,定义如下:

public abstract class CompanyBase : EntityBase<CompanyBase>
{
    public virtual string Name { get; set; }
    public virtual StreetAddress Address { get; set; }
    public virtual IEnumerable<PhoneNumber> PhoneNumbers { get; set; }
}
每个派生类都有自己的表-在本例中为CustomerCompanyVendorCompany。没有公司数据库

我通过Fluent NHibernate设置了自动映射,忽略了基类,除了
PhoneNumbers
属性之外,其他一切都很好。导出时,它不会显示在hbm文件中,也不会从数据库中提取。看起来它只是在俯瞰那片土地。如果我把
PhoneNumbers
属性放在派生类上,那么一切都很好

我在网上找不到任何与此相关的东西…有人看到过吗?有没有办法解决这个问题,或者我必须将
PhoneNumbers
声明移到派生类中(并最终导致大量重复)

更新:

我接受了下面的覆盖答案,但仍然认为自动映射应该考虑没有覆盖的集合。为了解决这个特殊问题,我最终做了一件事,那就是找到一个有区别的表,而不是每个子类一个表。这样做可以使事物正确地自动映射。

您可以随时覆盖约定。自动映射非常特殊,只能检测它已经知道要查找的内容以及您另外告诉它的内容:

mappings
   .Override<CustomerCompany>(m=>m.HasMany(x=>x.PhoneNumbers))
   .Override<VendorCompany>(m=>m.HasMany(x=>x.PhoneNumbers));
映射
.Override(m=>m.HasMany(x=>x.PhoneNumbers))
.Override(m=>m.HasMany(x=>x.PhoneNumbers));

将此项添加到自动映射配置中,应使其尽可能遵循多个约定,但也应按照特定要求执行。

您始终可以覆盖该约定。自动映射非常特殊,只能检测它已经知道要查找的内容以及您另外告诉它的内容:

mappings
   .Override<CustomerCompany>(m=>m.HasMany(x=>x.PhoneNumbers))
   .Override<VendorCompany>(m=>m.HasMany(x=>x.PhoneNumbers));
映射
.Override(m=>m.HasMany(x=>x.PhoneNumbers))
.Override(m=>m.HasMany(x=>x.PhoneNumbers));

将其添加到自动映射配置中,应使其尽可能遵循多种约定,但也应按照特定要求执行。

您可以尝试一件事

将电话号码的类型从IEnumerable更改为IList。然后,我希望您的所有派生类都继承该列表,而不需要任何约定或重写


根据经验,我知道IList得到了FNH自动映射的良好支持,但对IEnumerable不太确定

有一件事你可以试试

将电话号码的类型从IEnumerable更改为IList。然后,我希望您的所有派生类都继承该列表,而不需要任何约定或重写


根据经验,我知道IList得到了FNH自动映射的良好支持,但对IEnumerable不太确定

是否应该支持自动映射基类中的集合?我讨厌必须处理覆盖,因为我已经设置了一系列约定来处理级联等。我不是必须在每个覆盖上显式地复制这些一对多约定吗?应该支持基类中的自动映射集合吗?我讨厌使用覆盖,因为我已经建立了一系列的约定来处理级联,等等。难道我不需要在每个覆盖上显式地复制这些一对多的约定吗?