0

私の EF クラスを見ると、次のようなコードが散らばっています。

if (_myContext.[EntityType].Any(d => d.RowId == dc.RowId))  
{
    _myContext.[EntityType].Attach(dc);
    _myContext.Entry(dc).State = EntityState.Modified;
}
else
{
    _myContext.[EntityType].Add(dc);
}

それは何度も何度も同じことであり、ジェネリック関数で処理するのが明らかにむずむずしています。

ただし、さまざまな予期しないエンティティ タイプを処理する必要性をどのように処理するかはわかりません。私が始めるための良い例をいただければ幸いです。

4

1 に答える 1

0

同様の問題がありました。これは私の古いコードの一部です (現在、ダイナミクスではなく基底クラスを使用しています)。これは更新のみを目的としていますが、うまくいけば一般的な考え方を示すはずです。

public void GenericSetItemIsActive<T>(int id) where T : class
{
    using (var db = new HotSpottingContext())
    {
        Expression<Func<T, bool>> whereFunction = m => m.As<dynamic>().ID == id;

        var selectedItem = db.Set<T>().FirstOrDefault(whereFunction);

        if (selectedItem != null)
        {
            dynamic dynamicItem = selectedItem;
            dynamicItem.IsActive = !dynamicItem.IsActive;

            db.Entry(dynamicItem).State = EntityState.Modified;
            db.SaveChanges();
        }
    }
}

また、を使用するExpressionとDBが作業を行うことができることに注意してくださいFunc.thenを使用すると、すべての行が取得されるため、そうしないでください... :)

于 2014-01-21T17:34:27.413 に答える