0

最初は、変更されたモデルを更新しようとしただけでした。たとえば、モデルとしての「記事」について話します。次のメソッドは、「Articles」と呼ばれるクラスに実装されています。

    public static void SaveArticle(Article article) 
    {
        if (article.Id == 0)
        {
            webEntities.Articles.Add(article);
        }
        else
        {
            webEntities.Articles.Attach(article);
            webEntities.Entry(article).State = EntityState.Modified;
        }

        webEntities.SaveChanges();
    }

したがって、変更された記事をコントローラーアクションに保存する場合は、「Articles.SaveArticle(myArticle);」を呼び出すだけで、期待どおりに機能します。
これまでのところ良好ですが、これは、すべてのモデル/エンティティに対してこれを冗長に実装する必要があることを意味します。

次に、テンプレートパターンのようなものについて考えました。つまり、「Article」が「Entity」から継承する「Entity」というクラスです。
さらに、「Entities」というクラスには、次のような静的メソッドが含まれています。

    public static void SaveEntity(Entity entity) 
    {
        if (Entity.Id == 0) // <-- Problem 1
        {
            webEntities.Entities.Add(entity); // <-- Problem 2
        }
        else
        {
            webEntities.Entities.Attach(entity); // <-- Problem 3
            webEntities.Entry(entity).State = EntityState.Modified; // <-- Problem 4
        }

        webEntities.SaveChanges();
    }

したがって、冗長に実装する必要はありませんが、上記のコードで説明されている問題を解決する方法がわかりません。複雑すぎると思いますか、それとも私の問題のベストプラクティスは何でしょうか?

前もって感謝します!

敬具

4

1 に答える 1

1

ジェネリックを使用します。

public static void Save<T>(T entity)
    where T : class
{
    webEntities.Set<T>().AddOrUpdate(entity);
    webEntities.SaveChanges();
}

AddOrUpdateSystem.Data.Entity.Migrations の拡張メソッドです。

于 2013-02-01T13:50:20.113 に答える