0

Fluent NHibernate を使用してオブジェクトを自動マッピングするのに問題があります。

Documentテーブルが既に SqlServer に存在するクラスが呼び出されました。

Class Packet extends Documentと Have a member PacketDefinition

PacketDefinition( WindowsフォームListではなく、自分のクラス)タイプがあります。Form

ここに画像の説明を入力

次の構成を使用してオブジェクトを自動マップしようとしてPacketいます。

        var mapping = CreateMappings();

        _sessionFactory = Fluently.Configure()
                                  .Database(
                                      MsSqlConfiguration.MsSql2008.ConnectionString(
                                          c => c.Server("machinename\\sql2012").Database("DatabaseName").TrustedConnection())
                                                        .ShowSql)
                                  .Mappings(m => m.AutoMappings.Add(mapping))
                                  .ExposeConfiguration(BuildSchema)
                                  .BuildSessionFactory();

    private static AutoPersistenceModel CreateMappings()
    {
        return AutoMap
            .AssemblyOf<Packet>();
    }

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

Packet問題は、クラスを自動マップしようとすると、エラーが発生することです

System.Data.SqlClient.SqlException : There is already an object named 'Document' in the database.

テーブルがデータベースに既に存在することは理解してDocumentいますが、削除したくありません。を使用して基本クラスを無視してみました

AutoMap.AssemblyOf<Packet>().IgnoreBase<Document>();

Documentしかし、自動マッピングはテーブル内のすべてのプロパティも作成しますがPacket、これは良くありません。

別のデータベースを作成してから同じコードを実行しようとDocumentすると、そのデータベースにテーブルが存在しないため機能します。大量のデータがあるため、既存のテーブルを削除したくありません。

4

1 に答える 1

0

私の理解が正しければ、「大量のデータが含まれている」ため、 Document テーブルの削除を回避しようとしています。

私はあなたが望むことをする方法を知りません。FNH と NH にはデータ移行機能 (AFAIK) がありません。このように使用しようとすると、システムと戦っているだけだと思います。

テーブルが 1 つだけの場合は、CSV ファイルなどのフラットな形式にエクスポートし、FNH でスキーマを再構築してから、データを再度インポートするなどの簡単なことを行うことができます。

ただし、このアプローチは、スキーマが進化してより複雑になるにつれて、うまく拡張できない場合があります。

私のプロジェクトでは、この問題を回避することができました。これは、最初にレガシー プログラムでも使用される独自のバイナリ ファイルにデータを保存し、スキーマが変更されたときにすべてのデータを再インポートできるようにするためです。しかし、それはほとんどのプロジェクトにとって理想的ではありません。

于 2013-03-12T15:01:21.243 に答える