1

FluentNHibernateによって次のように構成された既存の空のSQLServer2005データベースから始めています。

ISessionFactory nhibernateSessionFactory = Fluently
    .Configure()
    .Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm)))
    .Database(
        MsSqlConfiguration.MsSql2005
            .ShowSql()
            .ConnectionString(DatabaseConfig.Instance.ConnectionString))
    .ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true))
    .BuildSessionFactory();

私はこの地図を持っています:

public abstract class AccountSystemMapBase<T> : ClassMap<T>
{
     protected AccountSystemMapBase()
     {
         Schema("`AccountSystem`");
     }
}

public class UserMap : AccountSystemMapBase<User>
{
    public UserMap() : base()
    {
        Table("`User`");
        ...
    }
}

Userデフォルトのスキーマではなく、データベーススキーマ「AccountSystem」内にテーブルを作成したいので、マッピングにdbo追加するとこれが行われると想定しました。Schema(...)

実際に起こったことは、Userテーブルに対してクエリを実行しようとすると、「オブジェクト[AccountSystem].[User]が存在しない」という例外を受け取ったことです。実際、驚いたことに、データベースに名前が付けられたdbスキーマの兆候はありませAccountSystemんでした。つまり、スキーマとテーブルはまったく作成されていませんでした。私はNHibernateのバージョン3.1を使用しています。これは、現在FluentNHibernateでサポートされている最新のものです。スキーマの作成を機能させるためのアイデア/回避策はありますか?

4

1 に答える 1

3

Nibernateはデータベースもユーザースキーマも作成しません。それらの中のテーブル構造のみ。

最初にデータベースを作成する必要があります(ドライバーによって自動的に作成される組み込みデータベースを使用する場合を除きますが、SQL Serverの場合はそうではありません)。

于 2012-03-17T14:17:56.713 に答える