使用 Fluent NHibernate Auto Mapping 从基实体类映射类型对象的 ID

Posted

技术标签:

【中文标题】使用 Fluent NHibernate Auto Mapping 从基实体类映射类型对象的 ID【英文标题】:Using Fluent NHibernate Auto Mapping to map IDs of type object from base Entity class 【发布时间】:2009-07-06 19:37:12 【问题描述】:

在我现在正在进行的项目中,我们有如下所示的基本实体类:

public abstract class Entity<T> where T : Entity<T>

    public virtual object Id  get; protected set     
    // Equals, GetHashCode overrides, etc...

从 Entity 继承的大多数类应该将 Id 映射到 SQL Server 数据库中的 int 列,但至少有一个需要映射到 long (bigint)。

是否可以创建 FluentNH 自动映射约定以默认将这些对象 ID 映射到 int? 然后我们可以使用另一个约定或 IAutoMappingOverride 来处理长 Id。

谢谢!

【问题讨论】:

【参考方案1】:

回答我自己的问题...有可能。

你可以这样定义约定:

internal class PrimaryKeyConvention : IIdConvention

    public bool Accept(IIdentityPart id)
    
        return true;
    

    public void Apply(IIdentityPart id)
    
        if (<ID should be long>)
            id.SetAttribute("type", "Int64");
        else
            id.SetAttribute("type", "Int32");
    

【讨论】:

以上是关于使用 Fluent NHibernate Auto Mapping 从基实体类映射类型对象的 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用 Fluent NHibernate 和 NHibernate 3 将枚举映射为 Int

Fluent 映射和 NHibernate Xml 配置

NHibernate 2 + Fluent Nhibernate 中等信任

使用 Fluent NHibernate 映射泛型类

在使用fluent-nhibernate配置nhibernate时,为什么会出现MissingMethodException?

使用 2 种策略通过 fluent nhibernate 映射类层次结构