2016-08-05 4 views
0

EntityFramework DBContextに関連する関数を実装するとき、DRYの原則を遵守するために何らかの問題があります。詳細はentityContextでDRYを適用します。

、私はSelectClient機能を持っている:

public static Client SelectClientFromID(String ClientID) 
    { 
     using (DBContext SaveContext = new DBContext()) 
     { 
      try 
      { 
       SaveContext.MyCompanies.Load(); 
       SaveContext.MyProjects.Load(); 
       SaveContext.MyClient.Load(); 
       return SaveContext.MyClient.Where(x => x.ClientID.ToString() == ClientID).FirstOrDefault(); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 
    } 

今私は、今ではそのように見えるため、DeleteClient機能を持っているしたいと思います:DRY原則に従うために

public static void DeleteClient(Client client) 
    { 
     try 
     { 
      using (DBContext SaveContext = new DBContext()) 
      { 
       SaveContext.MyCompanies.Load(); 
       SaveContext.MyProjects.Load(); 
       SaveContext.MyClient.Load(); 
       Client savedClient = SaveContext.MyClient.Where(x => x.ClientID == client.ClientID).FirstOrDefault(); 
       SaveContext.MyClient.Remove(savedClient); 
       SaveContext.SaveChanges(); 
      } 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 

I代わりに私のSelectClientFromID関数を呼び出して、私のSaveContext.MyClient.Remove(savedClient)savedClientとし、私のSelectClientID関数の返り値とすることができます。
悲しいことに、私のクライアントは別のDBContextから来るので、動作しません。
機能を正しく実装するにはどうすればよいですか?

答えて

1

あなたは時間をかけて、リポジトリパターン/作業単位のパターンについて読んでください。エンティティのすべてのリポジトリに共通のDbContextインスタンスを持つことで、問題を解決します。

+0

Hum、私はちょうどhttp://www.codeproject.com/Articles/581487/Unit-of-Work-Design-Patternを読み終えましたが、私の作業ユニットはすでに私のDBContextです。グローバルなDBContextを作成することは危険なようですが、より詳細な説明を含むドキュメントがありますか? – Belterius

+0

@Belterius http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work -patterns-in-an-asp-net-mvcアプリケーションはここに良い記事です – Alex

関連する問題