2017-03-07 7 views
0

私は、ビデオRepository Pattern with C# and Entity Framework, Done RightとAspnet Boilerplateのようなリポジトリパターンに関する良い出典を見てきました。私はリポジトリに作業単位の責任であるデータをコミットするロジックがあってはならないことを知っています。 しかし、あなたが親、その子どものすべてを読んで削除する必要があるかもしれないので、子どもと親レコードの削除を行う太りすぎのようです。このような実装の例は、同じビデオ内のEntity Frameworkを使用して確認できます。deleting authors and course。 Aspnetボイラープレートはa implementation to delete with a primary key, which read the entity before deleting tooです。 ですから、私は質問します。削除コマンドを使用してパターンを尊重することはできますか?そこに良い例はありますか?削除はリポジトリパターンで最初に読み取る必要がありますか?

+0

[スタブエンティティ](http://stackoverflow.com/a/28261869/861716)を使用してください。 –

答えて

1

リクエストごとに1つのContextを注入するか、この場合は1つの作業ユニットを注入すると、これはどのように問題になるかわかりません。あなたはORMを使用する場合は、その上に、1回の以下の読み取りを行う。この方法は、MediatRのようなコンポーネントを見てみましょう

var product = new Product { Id = productId }; 
db.Entry(product).State = System.Data.Entity.EntityState.Deleted; 
db.SaveChanges(); 

、なぜyou don't even need a repository:、その子のためのようなものをカスケードを設定します。

+0

DbContextを使用すると、リポジトリのニーズを満たすことができると主張する人がいます。私はMoshからこのビデオを勉強していましたが、DbContextが良い解決策ではないことを示しています:https://youtu.be/rtXpYpZdOzM?t=5m3s とにかく、私の質問にはまだ同じ問題があります: Repository 、私はいつも削除の前に実体を読む必要がありますか?どのように私は削除コマンドを使用することができますので、私はデータベースに一度だけ行くでしょうか? あなたの解決策は、子供の読書を避けるのは良いことですが、依然として親を読むことです。 – mqueirozcorreia

+1

私の解決策は親を読んでいない、それは既に存在するもののIDを持つ親のインスタンスをニュースし、効率の点でSaveChangesで削除する、他の方法はない、再びベストプラクティスではないあなたがそれを必要としないときにデザインパターンを使用しますが、作業ユニットの目的は、作業パターンの単位の実装であるdbコンテキストですでに持っているアトミックトランザクションを持つことです。 –

+0

ありがとう!ニースのソリューションといくつかの人々がここに例をあげました http://stackoverflow.com/a/37802938/3424212 – mqueirozcorreia

関連する問題