具有相似属性但没有继承层次结构的 Fluent NHibernate 映射表
Fluent NHibernate mapping tables with similar properties but no inheritance hierarchy
我在为以下模型结构开发一组合理的 Fluent NHibernate 映射时遇到问题:
public class BaseLookup
{
public virtual int Id {get; set;}
public virtual string Code {get; set;}
public virtual string Value {get; set;}
public virtual bool Active {get; set;}
}
public class Subdivision : BaseLookup { }
public class AvisCode : BaseLookup { }
public class District : BaseLookup { }
/*etc.*/
这些查找都共享属性,但在其他方面彼此没有关系。这些 table 对报表有特殊的语义含义,将在存储过程中专门引用,所以我不希望将它们混搭成需要我使用的通用 'lookups' table鉴别器。这似乎消除了我映射中的 Table-per-Hierarchy 和 Table-per-Sublass 策略。我也很难使用 Table-per-Concrete-Class 因为每个查找都有自己的标识列 - 我不想在应用程序中手动分配一个 Id,并且没有要求因为 ID 在所有这些 table 中都是唯一的。
目前,我的映射看起来像这样,并且对于 BaseLookup 的每个超类都是相同的:
public class AvisCodeMap : ClassMap<AvisCode>
{
public AvisCodeMap()
{
Schema(Schemas.pva.ToString());
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Code).Not.Nullable();
Map(x => x.Value).Not.Nullable();
}
}
是否没有允许我将重复映射提取到可重用代码块的映射约定?
如果我对你的问题的理解正确,你可能需要创建一个通用基础 class 地图,然后在派生地图中重复使用它。
例子如下:
public class BaseLookupMap<T> : ClassMap<T> where T : BaseLookup
{
public BaseLookupMap()
{
// ... base mapping code goes here ...
}
}
要创建该基类型:
public class BaseLookupMap : BaseLookupMap<BaseLookup>
{
}
以及导出的class映射:
public class AvisCodeMap : BaseLookupMap<AvisCode>
{
public AvisCodeMap()
{
Polymorphism.Explicit();
// ... your other mappings here, if needed ...
}
}
HTH.
我在为以下模型结构开发一组合理的 Fluent NHibernate 映射时遇到问题:
public class BaseLookup
{
public virtual int Id {get; set;}
public virtual string Code {get; set;}
public virtual string Value {get; set;}
public virtual bool Active {get; set;}
}
public class Subdivision : BaseLookup { }
public class AvisCode : BaseLookup { }
public class District : BaseLookup { }
/*etc.*/
这些查找都共享属性,但在其他方面彼此没有关系。这些 table 对报表有特殊的语义含义,将在存储过程中专门引用,所以我不希望将它们混搭成需要我使用的通用 'lookups' table鉴别器。这似乎消除了我映射中的 Table-per-Hierarchy 和 Table-per-Sublass 策略。我也很难使用 Table-per-Concrete-Class 因为每个查找都有自己的标识列 - 我不想在应用程序中手动分配一个 Id,并且没有要求因为 ID 在所有这些 table 中都是唯一的。
目前,我的映射看起来像这样,并且对于 BaseLookup 的每个超类都是相同的:
public class AvisCodeMap : ClassMap<AvisCode>
{
public AvisCodeMap()
{
Schema(Schemas.pva.ToString());
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Code).Not.Nullable();
Map(x => x.Value).Not.Nullable();
}
}
是否没有允许我将重复映射提取到可重用代码块的映射约定?
如果我对你的问题的理解正确,你可能需要创建一个通用基础 class 地图,然后在派生地图中重复使用它。
例子如下:
public class BaseLookupMap<T> : ClassMap<T> where T : BaseLookup
{
public BaseLookupMap()
{
// ... base mapping code goes here ...
}
}
要创建该基类型:
public class BaseLookupMap : BaseLookupMap<BaseLookup>
{
}
以及导出的class映射:
public class AvisCodeMap : BaseLookupMap<AvisCode>
{
public AvisCodeMap()
{
Polymorphism.Explicit();
// ... your other mappings here, if needed ...
}
}
HTH.