2017-10-09 61 views
-3

說,我們有如何獲得與反射實體框架的DbContext名

using (var lobo = new MyGymEntities()) 
{ 
} 

我想獲得DbContext名稱(在這種情況下是MyGymEntities)與反思,這可能嗎?

我想字符串值存儲到一個變量..

編輯:

我不想鍵入MyGymEntities.GetType().Name/FullName做到這一點。

我問是否有可能以某種方式獲得的組裝此信息,如

Assembly.GetExecutingAssembly().GetName().Name; //Return Projectname 

UPDATE

下面的解決我的問題,萬一有人

var a = Assembly.GetExecutingAssembly() 
       .DefinedTypes 
       .Where(x => x.BaseType?.Name == "DbContext").ToList(); 

Console.WriteLine(a.First().FullName); 

好的,夥計們,我會解釋爲什麼這個問題不是重複的,爲什麼我想獲取DbContext的名稱。

我很清楚,可以通過調用GetType()。Name對象來訪問對象的name屬性,但該方法只能由對象本身調用,這意味着我需要指定哪些對象的名稱屬性我想檢索。

例:

MyObject.GetType().Name; 

但是我想要做的是:獲得DbContextName(如果有任何)是上項目,解決方案。

爲什麼我需要這個?因爲我有我的處理查詢

我的自定義表單內目前通用的形式,我有這樣的事情

MyGymEntities context = new MyGymEntities(); 

現在如果我複製並粘貼當前的解決方案文件夾中創建一個新的項目,我將有將上面顯示的DbContext重命名爲我的解決方案的新DbContext的名稱。但是,如果我使用它來獲取ContextName,那麼比創建此名稱的DbContext的新實例並在我的自定義窗體上使用它,因此將需要爲每個將要創建的項目配置更少的配置...

var ContextName = Assembly.GetExecutingAssembly() 
      .DefinedTypes 
      .Where(x => x.BaseType?.Name == "DbContext").ToList().First().Name; 

謝謝!

+3

'GetType()。Name'? – FakeCaleb

+1

[C#獲取自己的類名稱](https:// stackoverflow。com/questions/2113069/c-sharp-getting-its-own-class-name) – FakeCaleb

+0

不,這不是一個重複的項目,我對不好的英語感到抱歉,我已經更新了我的問題,以便更清楚 – Licentia

回答

1

BaseType只返回直接的基本類型,如果稍後引入自定義的基本DbContext,將會中斷。你可以通過類似的方式獲得裝配中的所有DbContext類型:

var dbContextTypes = Assembly.GetExecutingAssembly() 
          .DefinedTypes.Where(t => typeof(DbContext).IsAssignableFrom(t)) 
          .ToList(); 
+0

謝謝!這會更好=) – Licentia