2

DLINQ の使用中に興味深い問題に遭遇しました。エンティティをインスタンス化すると、DataContext で .SubmitChanges() を呼び出すと、.Insert[All]OnSubmit(...) を呼び出すことなく、新しい行がデータベースに挿入されます。

//Code sample:
Data.NetServices _netServices = new Data.NetServices(_connString);

Data.ProductOption[] test = new Data.ProductOption[]
{
        new Data.ProductOption
        {
             Name="TEST1", 
             //Notice the assignment here
             ProductOptionCategory=_netServices.ProductOptionCategory.First(poc => poc.Name == "laminate")
        }
};

    _netServices.SubmitChanges();

上記のコードを実行すると、データベースに新しい行が挿入されます。XML ファイルを解析していくつかのテーブルにデータを入力するアプリを作成しているときに、この影響に気付きました。約 50 程度しかないと予想していたときに、1000 以上の挿入があることに気付きました。その後、最終的にこの動作を分離しました。

これらのオブジェクトが暗黙的に永続化されないようにするにはどうすればよいですか?

ありがとう -チャールズ

4

1 に答える 1

2

関係には両面があると考えてください。リレーションシップの片側を設定すると、もう一方の側を更新する必要があるため、上記のケースでは、ProductOptionCategory を設定するだけでなく、ラミネート ProductOptionCategory 側の ProductOptions リレーションシップに新しいオブジェクトを効果的に追加します。

回避策は、既に発見したとおりであり、代わりに基になる外部キーを設定することです。これにより、LINQ to SQL は通常の方法でオブジェクトを追跡せず、オブジェクトを永続化する必要があることを暗黙的に示す必要があります。

もちろん、パフォーマンスの最善の解決策は、追加したくないオブジェクトをソース データから判断し、最初からインスタンスを作成しないことです。

于 2008-12-23T08:40:58.707 に答える