EFコード最初:モデル構成
-
25-10-2019 - |
質問
私はできるだけ明確になろうとします:
私の目標:私がオーバーライドされたモデル構成を読むこと OnModelCreating
私のエンティティクラスの内部から派生したクラス DbContext
.
理由:ジェネリックを構築する void Update<T>(T toUpdate)
私のデータレイヤーの方法で、どのフィールドがtの主キーであるかを取得し、合格したものでそれらを取得します toUpdate
オブジェクトとそれらを使用します Set<T>().Find
方法。
これにより、私が処理するあらゆるタイプのエンティティのロジックをハードコードで見つけることができなくなります。
このような更新を適用するには、保存されたエンティティを取得する必要があります。
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues);
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
私は自分の中で立ち往生しています _entities
インスタンス(これは私のエンティティクラスから派生したクラスです DbContext
もちろん)モデル構成が格納されている場所を見つけることができないようです。
誰かが私を正しい方向に向けることができますか?
ありがとう。
解決
エンティティタイプのキープロパティ名を取得する方法をコードに見つけることができます YourEntity
ここ:
そして、値を取得します。
public Update<T>(T toUpdate)
{
// Code from link above with YourEntity = T
List<object> myRetrievedKeyValues = new List<object>();
foreach (var keyName in keyNames)
myRetrievedKeyValues.Add(toUpdate.GetType().GetProperty(keyName)
.GetValue(toUpdate, null));
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues.ToArray());
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
}
あなたが非常に遅くなることを期待してください Update
方法この一般的なアプローチには反射を使用する必要があるためです。
また、それを忘れないでください CurrentValues.SetValues
スカラーと複雑なプロパティのみを更新します。ナビゲーションプロパティを更新するのに役立ちません。各エンティティタイプに固有の関係を更新するには、非遺伝子コードを使用する必要があります。
所属していません StackOverflow