在我正在开发的当前应用程序中,我正在使用Fluent NHibernate来配置NHibernate以用作ORM。我希望能够为应用程序中使用的所有表名添加前缀,这样,如果我使用的数据库已经在为另一个应用程序提供服务,则两个应用程序之间不存在命名冲突。
例如,如果我想为每个表添加Portal_
前缀,Users
表将变为Portal_Users
。
当然,我知道如何在每个映射文件中配置每个表名,但这对我正在尝试做的事情来说并不是一个很好的解决方案。如果我想更改前缀,我将被迫更改每个映射文件。我希望能够在我的代码或配置中的单个位置为所有表名添加(或更改)前缀。
如何使用NHibernate(或Fluent NHibernate)为应用程序中的所有表名添加前缀?
答案 0 :(得分:3)
您可以实施自己的INamingStrategy并为您的配置指定:
Configuration config = new Configuration();
config.SetNamingStrategy(new MyTablePrefixStrategy());
答案 1 :(得分:2)
为了流利的实施..
public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator
{
public AutoPersistenceModel Generate()
{
var mappings = new AutoPersistenceModel();
mappings.AddEntityAssembly(typeof(User).Assembly).Where(GetAutoMappingFilter);
mappings.Conventions.Setup(GetConventions());
.....
private Action<IConventionFinder> GetConventions()
{
return c =>
{
c.Add<PrimaryKeyConvention>();
c.Add<ReferenceConvention>();
c.Add<HasManyConvention>();
c.Add<TableNameConvention>();
...
public class TableNameConvention : IClassConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance
instance)
{
instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" +
instance.EntityType.Name));
}
}