2010-10-07 107 views
0

我有做這樣的事情有沒有一種方法,以新的一類,它是同類型的其他類沒有直接指定它

public static void DoStuff(this ObjectContext context) 
{ 
    using(var newContext = new MyEntitiesContext()) 
    { 
     // do stuff 
     newContext.SaveChanges(); 
    } 
    context.SaveChanges(); 
} 

我在想擴展方法,如果有辦法的新上下文與上下文傳入的類型相同,而不是指定MyEntitiesContext?

在此先感謝

+0

我不知道如果newing了在擴展方法的DB背景下是正確的道路要走。也許你應該在這裏重新思考你的解決方案。只是一個想法。另外,ObjectContext和MyEntitiesContext有什麼區別?如果這是L2SQL,並且查看「MyEntitiesContext」的代碼 - 它將從ObjectContext繼承 - 所以不需要傳入ObjectContext,只需傳入MyEntitiesContext即可。 – RPM1984 2010-10-07 23:50:48

回答

2

如果你不介意的反思:

var context = Activator.CreateInstance(context.GetType()); 

現在,你要麼需要一個基本類型或 - 如果你仍然不介意反射 - 你可以簡單地調用該方法按名字。或者,因爲您使用的是C#4,所以您可以使用動態。

編輯:您還可以去這樣:

public static void DoStuff<T>(this T context) where T : ObjectContext, new() 
{ 
    using(var newContext = new T()) 
    { 
     // do stuff 
     newContext.SaveChanges(); 
    } 
    context.SaveChanges(); 
} 
+0

謝謝maxem。我會試試這個並回復你。 – zSynopsis 2010-10-07 23:59:24