如何覆盖NHibernate标识ID名称

时间:2014-02-04 11:14:29

标签: c# nhibernate fluent-nhibernate

我有以下课程;

public class Country
{
    public virtual int CountryId { get; set; }
    public virtual string Code { get; set; }
    public virtual string Name { get; set; }
    public virtual bool Preferred { get; set; }
    public virtual DateTime LastChanged { get; set; }
}

我使用Fluent NHibernate的自动化将我的表与我的对象相关联。

public static class SessionFactoryBuilder
{
    public static ISessionFactory BuildSessionFactory()
    {
        return Fluently.Configure()                              
            .Database(MySQLConfiguration.Standard.ConnectionString(""))
            .Mappings(m => m.AutoMappings.Add(CreateMappings()))
            .BuildSessionFactory();
    }

    // Returns our mappings
    private static AutoPersistenceModel CreateMappings()
    {
        return AutoMap
            .Assembly(System.Reflection.Assembly.GetCallingAssembly())
            .Where(t => t.Namespace == "Escape.Data.Entities");
    }
}

如何覆盖我在班级中定义的Id到CountryId的表格的身份ID。

1 个答案:

答案 0 :(得分:1)

我们应该在这里使用这个惯例。要更改默认主键名称,我们可以使用

PrimaryKey.Name.Is(x => x.EntityType.Name + "Id")

列名称约定可能是这样的,所以让我们实现IIdConvention

public class MyIdColumnNameConvention : IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {
        instance.Column(instance.EntityType.Name + "Id");
    }
}

并将其添加到配置

return AutoMap
        .AssemblyOf<Country>(t => t.Namespace == "Escape.Data.Entities")
        // use the convention
        .Conventions.Add(PrimaryKey.Name.Is(x => x.EntityType.Name + "Id"))
        .Conventions.AddFromAssemblyOf<MyIdColumnNameConvention >()

在此处查看更多信息: