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 的事情还是项目参考的事情。当我可以在没有反射的情况下如此轻松地创建对象时,为什么我不能使用简单的反射来创建该对象的新实例?

4

1 回答 1

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);
于 2011-02-03T23:03:01.477 回答