2011-02-03 78 views
1

我想使用反射來創建一個實體框架對象的實例來創建實體框架對象的實例:無法使用反射

var type = Type.GetType("MyAssembly.MyEntityNamespace.MyEntity"); 
var target = Activator.CreateInstance(t); 

我以前用這個代碼,它一直在「常規工作太棒了「對象,但是當我在此解決方案的EF對象上使用它時,GetType()會返回null。我的EF模型在它自己的單獨項目中,並且此代碼正在其自己的單元測試程序集中執行。測試組件確實參考EF組件並且EF組件正在使其進入/ bin。

我可以正常創建EF類的實例,但即使這樣的嘗試在反思不起作用:

var item = new MyEntity();    //works fine 
Type.GetType(item.GetType().FullName); //null 
Type.GetType(item.GetType().Name);  //null 

我不知道如果這是一個EF的事情或項目參考的東西。爲什麼我無法使用簡單反射來創建此對象的新實例,因爲我可以在不反射的情況下輕鬆創建對象?

回答

3

由於EF上下文位於不同的程序集中,因此您需要提供程序集限定的名稱,而不僅僅是名稱空間和類型名稱。

裝配合格的名稱看起來是這樣的:

"MyAssembly.MyEntityNamespace.MyEntity, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 

如果您正在使用的System.Web,也有基於他們的名字更容易識別類的一些公用事業類BuildManager:

Type type = BuildManager.GetType("MyAssembly.MyEntityNamespace.MyEntity", false, true); 
+1

http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx – Reddog 2011-02-03 23:04:34