首页 文章

带有模式的NHibernate后缀表名

提问于
浏览
0

如何以下列格式为表名添加后缀

[schema][.][tableName]

如果我做以下

public class PrescriptionOverride : AutoMappingOverride<Prescription>
{
    mapping.Table("schema.TableName);
}

如果架构实际上不存在于DB中,则不起作用 . 它实际上会忽略该表 .

'TableName'

从被映射

那么如何使用NHibernate创建一个SQL Schema,以便您可以使用该模式将表附加到它 .

SQL等价物:

create schema [mySchema]
  go
  create table [mySchema].[MyTable](id int)

1 回答

  • 1

    如果模式尚不存在,则需要使用auxiliary database objects来创建模式 . 但是,这些在使用NH创建数据库模式时生效 .

    public class CreateSchema : AbstractAuxiliaryDatabaseObject
    {
        public override string SqlCreateString(Dialect dialect, IMapping p, string defaultCatalog, string defaultSchema)
        {
            return "CREATE SCHEMA [mySchema]";
        }
    
        public override string SqlDropString(Dialect dialect, string defaultCatalog, string defaultSchema)
        {
            return "DROP SCHEMA [mySchema]";
        }
    }
    

    然后你需要将它添加到你的配置:

    config.AddAuxiliaryDatabaseObject(new CreateSchema());
    

    当你这样做时它会生效:

    new SchemaExport(config).Create(true, true);
    

    要么:

    new SchemaExport(config).Drop(true, true);
    

相关问题