В моем эксперименте я сохранил некоторые объекты испускаемого типа, которые подклассифицировали тип в сборке ввода, как показано ниже:
///normal assembly
public class Person{ public string Name; public int Age;}
///dynamic assembly "dynAsm"
public class Dude: Person{}
Peron tom = (Person)Activator.CreateInstance(dudeType);
tom.Name = "Tom";
tom.Age = 100;
db.Store(tom);
Он успешно сохранен в файле базы данных. Потому что я проверил файл с помощью ObjectManager, и увидел, что объект Том на самом деле там.
Но когда я использовал методы запросов IObjectContainer и IQuery для программного извлечения сохраненного объекта, я ничего не получил взамен.
Я пробовал:
db.Query(dudeType); //dudeType is from a dynamic assembly with the same name as
//the one used to generate "tom"
//nothing
db.Query(typeof(Person));
//nothing
db.Query(typeof(object));
//still nothing
и используя объект IQuery таким же образом, я тоже ничего не смог получить.
Итак, кто-то, пожалуйста, скажите мне: почему я не могу этого сделать? Почему даже подход базового класса тоже не сработает?
PS: Когда я сохранил динамическую сборку в файл, загрузил ее и повторил запрос, все работало нормально. Но, как вы знаете, CLR не позволяет выгружать сборку, поэтому сохранение загрузки не совсем то, что я хотел