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

发布于 2024-08-06 05:24:06 字数 432 浏览 5 评论 0原文

在我正在开发的当前应用程序中,我使用 Fluent NHibernate 来配置 NHibernate 以用作 ORM。我希望能够为应用程序中使用的所有表名添加前缀,这样,如果我使用的数据库已经为另一个应用程序提供服务,那么两个应用程序之间就不会出现命名冲突。

因此,例如,如果我想向每个表添加 Portal_ 前缀,则 Users 表将变为 Portal_Users

当然,我知道如何在每个映射文件中配置每个表名称,但这对于我想要做的事情来说并不是一个好的解决方案。如果我想更改前缀,我将被迫更改每个映射文件。我希望能够在代码或配置中的一个位置添加(或更改)所有表名称的前缀。

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

In the current application I'm developing I'm using Fluent NHibernate to configure NHibernate for use as an ORM. I want to be able to add a prefix to all the table names used in the application, so that if I use a database that is already servicing another application, there are no naming conflicts between the two applications.

So for instance if I wanted to add a prefix of Portal_ to each table, the Users table would become Portal_Users.

Of course, I know how to configure each table name in each mapping file, but that's not really a good solution for what I'm trying to do. If I ever wanted to change the prefix, I would be forced to change each of the mapping files. I want to be able to add (or change) the prefix to all the table names in a single place in my code or configuration.

How does one add a prefix to all table names within an application using NHibernate (or Fluent NHibernate)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

や三分注定 2024-08-13 05:24:06

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

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

You can implement your own INamingStrategy and specify it for your Configuration:

Configuration config = new Configuration();
config.SetNamingStrategy(new MyTablePrefixStrategy());
小霸王臭丫头 2024-08-13 05:24:06

为了顺利实施

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

For a fluent implementation..

 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));
                }
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文