Visual Studio 如何配置NHibernate(或Fluent NHib)以向所有表名添加表名前缀?

ecfsfe2w  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(122)

在我正在开发的当前应用程序中,我正在使用Fluent NHibernate来配置NHibernate以用作ORM。我希望能够为应用程序中使用的所有表名添加前缀,以便如果我使用已经为另一个应用程序提供服务的数据库,则两个应用程序之间不会有命名冲突。
例如,如果我想在每个表中添加前缀Portal_,则Users表将变为Portal_Users
当然,我知道如何在每个Map文件中配置每个表名,但这并不是一个很好的解决方案。如果我想更改前缀,我将被迫更改每个Map文件。我希望能够在代码或配置中的单个位置为所有表名添加(或更改)前缀。

如何使用NHibernate(或Fluent NHibernate)为应用程序中的所有表名添加前缀?

rxztt3cl

rxztt3cl1#

您可以实现自己的INamingStrategy并为您的配置指定它:

Configuration config = new Configuration();
config.SetNamingStrategy(new MyTablePrefixStrategy());
axkjgtzd

axkjgtzd2#

对于流畅的实现。

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

相关问题