2011-02-03 64 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