0

エンティティ フレームワーク 5.0 を使用して、mvc 4 のモデル内のエンティティをどのように反復処理しますか? linq を使用してより洗練されたプロセスを探しています。

例: AnimalModel には、Cat、Dog、Pig エンティティが含まれる場合があります。エンティティだけを検出し、isHarry、Name、isWalking、isJumping などの AnimalModel の他のプロパティを無視するにはどうすればよいでしょうか。リフレクションを使用せずにこれを行う方法はありますか?これは、null 以外のエンティティ値を確認できる EF5 内の何かです。

私がこの手法に興味を持った主な理由は、コードの肥大化を減らし、すべてのエンティティとサブエンティティのデータに対して一般的な CRUD 操作を実行することです。

可能な参照:リンク

4

2 に答える 2

0

EF を使用して挿入/更新すると、関連のないすべてのプロパティが自動的に無視されます。既存のオブジェクトからプロパティを取得してデータベースに適用する実装が必要な場合は、比較的新しいupsertを使用できます。


オブジェクトのグラフをアップサートする独自の方法が必要な場合...

データベース優先またはモデル優先 (EDMX がある場合) を使用している場合は、T4 テンプレートを使用して、これを行うコードを生成できます。

この手法でナビゲーション プロパティをサポートする場合は、ループを防ぐために何らかの仮定が必要です。たとえば、1 対多の更新ではなく、その逆ではなく、多対多のプロパティではないか、または EDMX のオプションの説明を使用してどのナビゲーション プロパティにアクセスするかのヒント。

ただし、リフレクションを使用する方が簡単な解決策ですが、リフレクションを使用する場合でも、どの方法を使用するかを決定する必要があります (たとえば、属性を使用する (上記の仮定/トリックを使用して T4 を追加できます))。


または、この手法(私が書いたもの) を EF で動作するように変換して、コードを使用してグラフ内のどこにアクセスするかを明示的に指定することもできます (dbset.SaveNavigation(graph, listOfPropertyPaths)作成時に実行したいことを想定した複雑なコードを記述する代わりに、使用しますdbset.Save(graph)(過去に成功しましたが、まだアップロードしていません)。

最近見つけたこの関連記事も参照してください(まだ試していません)。

ところで、null プロパティはデータベースを更新する際に重要な意味を持ちます。多くの場合、それらを無視したくないでしょう。

于 2014-06-22T18:44:54.823 に答える