Ответ на вопрос 2: Для того, чтобы классы POCO работали, вам нужно будет сгенерировать код во время выполнения, возможно, с использованием System.Reflection.
Если вы проанализируете EntityFramework, вы увидите, что для этого требуются виртуальные свойствавыполнить отслеживание изменений ... это потому, что ему нужно создать сгенерированный класс во время выполнения, который переопределяет каждое свойство, а затем добавляет код, чтобы сообщить DataContext, когда кто-то изменяет это свойство.
EntityFramework такжегенерирует код для инициализации коллекций, поэтому, когда кто-то пытается выполнить такие операции, как Add и Remove, сам объект коллекции знает, что делать.