Невозможно создать экземпляр объекта каркаса сущности, используя отражение - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь создать экземпляр объекта Entity Framework, используя отражение:

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

Я использовал этот код раньше, и он всегда отлично работал на «обычных» объектах, но когда я использую егоEF объекты в этом решении, GetType() возвращает ноль.Моя модель EF находится в отдельном проекте, и этот код выполняется в собственной сборке модульного тестирования.Тестовая сборка действительно ссылается на сборку EF, а сборка EF попадает в / bin.

Я могу нормально создать экземпляр классов EF, но даже эта попытка отражения не работает:

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

Я не уверен, что это вещь EF или ссылка на проект,Почему я не могу создать новый экземпляр этого объекта, используя простое отражение, когда я могу создать объект так легко без отражения?

1 Ответ

3 голосов
/ 04 февраля 2011

Так как контекст 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);
...