3

このコードでNhibernateを使用してSQLServerCEのスキーマを作成する場合:

Fluently.Configure()
            .Database(MsSqlCeConfiguration.Standard
            .ConnectionString(c => c.Is("Data Source=" + file))
            .Dialect<NHibernate.Dialect.MsSqlCeDialect>()
            .Driver<NHibernate.Driver.SqlServerCeDriver>()
            .ShowSql())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<NHibernateSessionFactory>())
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();  

private static void BuildSchema(Configuration config)
    {
       // new SchemaExport(config).Drop(false, true);
        //new SchemaExport(config).Create(true, true);

         //If DB File does not exists, create it.
        if (!File.Exists(file))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(databaseFileName));
            SqlCeEngine engine = new SqlCeEngine("Data Source="+ file);
            engine.CreateDatabase();
            // this NHibernate tool takes a configuration (with mapping info in)
            // and exports a database schema from it
            new SchemaExport(config).Execute(false, true, false);
            //FormulasDAO.AddDefaultFormulaCollection();
        }
        else
        {
            new SchemaUpdate(config).Execute(false, true);
        }
    }

このような例外が発生しました

SessionFactoryの作成中に、無効または不完全な構成が使用されました。詳細については、PotentialReasonsコレクションとInnerExceptionを確認してください。

内部例外は

アセンブリSystem.Data.SqlServerCeのIDbCommandおよびIDbConnection実装が見つかりませんでした。アセンブリSystem.Data.SqlServerCeがアプリケーションディレクトリまたはグローバルアセンブリキャッシュにあることを確認します。アセンブリがGACにある場合は、アプリケーション構成ファイルの要素を使用して、アセンブリのフルネームを指定します。

この問題のヘルプ。

4

1 に答える 1

7

実際の問題は、GACには2つのバージョンのdllがあるため、NHibernateはバージョン名のみを使用せずにdll名を使用してGACからdllを取得するため、どのdllを使用する必要があるかを認識していませんでした。

したがって、AppConfigでNHibernateに通知する必要があります

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</assemblyBinding>

于 2013-03-29T11:51:22.640 に答える