最初にロードせずにEntity Frameworkモデルからオブジェクトを削除する方法を教えてください。

asp.net-mvc entity-framework linq-to-entities

質問

この質問に対する答えはどこかで見たことは間違いないと思いますが、SOやGoogleで何度か検索しても見つけることができなかったので、とにかくもう一度質問します...

Entity Frameworkでは、データオブジェクトを削除する唯一の方法は、

MyEntityModel ent = new MyEntityModel();
ent.DeleteObject(theObjectToDelete);
ent.SaveChanges();

ただし、この方法では、オブジェクトを削除するために、この場合は最初にコントローラにロードする必要があります。例えばそのIDだけを参照しているビジネス・オブジェクトを削除する方法はありますか?

LinqやLambdaの式を使ったもっと賢い方法があれば、それも大丈夫です。ただし、主な目的は、削除するためだけにデータをロードしないようにすることです。

受け入れられた回答

Entity FrameworkがLinq to EntitiesとEntity SQLの両方をサポートしていることを知っておく価値があります。多くのレコードに影響を与える可能性がある削除または更新を自分で行いたい場合は、 ExecuteNonQueryと同等のものを使用できます。

Entity SQLでは、これは次のようになります。

   Using db As New HelloEfEntities

        Dim qStr = "Delete " & _
                  "FROM Employee"
        db.ExecuteStoreCommand(qStr)
        db.SaveChanges()
    End Using

この例では、 dbは私のObjectContextです。 ExecuteStoreCommand関数はオプションのパラメータ配列を取ることにも注意してください。


人気のある回答

私はこの記事を見つけました、それは本当にレコードを削除するより良い方法がないと述べています。与えられた説明では、このレコードに固有のすべての外部キー、関係なども削除されるため、EFはそのレコードに関する正しい情報を持っている必要があります。データを前後にロードしないとこれを達成できない理由に戸惑いますが、それほど頻繁には起こらないので、(今のところ)気にしないことにしました。

あなたがこの問題に対する解決策を持っているならば、私に知らせてください=)



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ