0

これは私が手に入れることができないどこかで単純なものでなければなりません。

ビジネスが複数のサービスを提供しているとしましょう。一方のビジネス、ルックアップテーブルとしてのServiceOffers、および関連付けのBusinessServiceOffers。以下のように多対1のマッピングを追加すると、sqliteプロバイダー(単体テスト中)が引数を範囲外の例外としてスローしました。これは、当然のことながら、PropertyとManyToOneの両方で参照が重複しているためです。

Property(x => x.ServiceOfferingId);
ManyToOne
        (
            x => x.ServiceOffering,
            x =>
            {
                x.Fetch(FetchKind.Select);
                x.Lazy(LazyRelation.Proxy);
                x.Column("ServiceOfferingId");
                 x.ForeignKey("FK_BusinessServiceOffering_ServiceOfferingId");
            }
        );

プロパティを削除すると例外の問題が修正されましたが、テストは失敗し続けました。挿入されたSQLを調べると、次のような割り当てられたint値の代わりに、ServiceOfferingIdに「null」が挿入されていることがわかります。

INSERT 
INTO
    BusinessServiceOffering
    (BusinessId, IsEnabled, CreatedDate, CreatedByLoginId, ModifiedDate, ModifiedByLoginId, ServiceOfferingId, BusinessServiceOfferingId) 
VALUES
    (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);
@p0 = 200 [Type: Int32 (0)], @p1 = True [Type: Boolean (0)], 
@p2 = 2/28/2013 6:11:25 PM [Type: DateTime (0)], 
@p3 = 20 [Type: Int32 (0)], @p4 = 2/28/2013 6:11:25 PM [Type: DateTime (0)], 
@p5 = 30 [Type: Int32 (0)], @p6 = **NULL** [Type: Int32 (0)], --->
@p7 = 5 [Type: Int32 (0)]

「片側」に鞄を入れてみましたが、何の違いもないようです。

私は何が欠けていますか?プロパティの有無にかかわらず正常に実行されるSQLサーバーとの統合テストがあることに注意してください。ただし、SQL Serverを使用した単純な読み取りテストでは、プロパティが削除されたフィールドのデータは返されません。

適切にマッピングする必要があるようです。そうでない場合は、sqliteの特異性です。

助けてください。

4

1 に答える 1

0

Ok。これを自分で考え出し、他の誰かが同じ問題に遭遇した場合に回答を投稿しました。

  1. null として挿入されたフィールドは、そもそも POCO にあるはずがありませんでした。必要に応じて、子/ネストされたオブジェクトを介して、関係が正しくマップされている場合にアクセスできます。
  2. sqlite へのデータの挿入は、オブジェクト参照規則に従います。たとえば、子が親へのキー参照を保持し、親が子のリストを保持する親子関係では、最初に親、次に子を作成して保存します。この場合のマッピングは、親の子のバッグ/セットです。後ほど更新する他のケースがあります。
于 2013-03-01T17:01:02.390 に答える