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; }
}
每个派生类都有自己的表-在本例中为CustomerCompany和VendorCompany。没有公司数据库表
我通过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不太确定 是否应该支持自动映射基类中的集合?我讨厌必须处理覆盖,因为我已经设置了一系列约定来处理级联等。我不是必须在每个覆盖上显式地复制这些一对多约定吗?应该支持基类中的自动映射集合吗?我讨厌使用覆盖,因为我已经建立了一系列的约定来处理级联,等等。难道我不需要在每个覆盖上显式地复制这些一对多的约定吗?