1

リフレクションを使用して Entity Framework オブジェクトのインスタンスを作成しようとしています:

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 に答える