使用Fluent NHibernate自动映射从基本实体类映射类型对象的ID

时间:2009-07-06 19:37:12

标签: nhibernate fluent-nhibernate nhibernate-mapping

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

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 个答案:

答案 0 :(得分:0)

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

您可以像这样定义约定:

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");
    }
}