我有以下课程;
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。
答案 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 >()
在此处查看更多信息: