Я разрабатываю приложение последние пять месяцев и просто столкнулся с этой проблемой.Неоткрытые требования класса POCO
Мы используем EF5 и, подобно this question, я разработал иерархию классов, чтобы все классы сущностей были получены из абстрактного базового класса, чтобы принудительно реализовать интерфейсы проверки. Мы также используем атрибуты проверки в классах сущностей.
Все работает нормально, пока я не начал использовать классы сущностей в службах WCF. Я получаю кучу исключений в сериализации и пытаюсь выяснить, какое правило «POCO» я нарушил в дизайне. This article говорит мне, что класс (очевидно ...) не может быть абстрактным, но поскольку мои классы DERIVING из абстрактного класса, возможно, я нарушил правило, о котором я не знаю?
UPDATE: Вот исключение, которое я борюсь с:
System.Runtime.Serialization.SerializationException, mscorlib, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089
Тип 'System.Data.Entity.DynamicProxies.WorkSession_63308485A9007DE087FF55AD9F246FD677863AA39AD56FEF4586AB87E21832DD' с данными название контракта 'WorkSession_63308485A9007DE087FF55AD9F246FD677863AA39AD56FEF4586AB87E21832DD: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' не ожидается. Подумайте об использовании DataContractResolver или добавьте любые типы, не известные статически в список известных типов - например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, переданных DataContractSerializer.
Опубликовать соответствующие сообщения об исключениях. И нет, это не имеет никакого отношения к абстрактным базовым классам. –
Entity Framework динамически создает классы, которые производятся от вас, и эти динамически созданные классы не предназначены для сериализации. Если вы можете жить с ограничениями использования только тех классов, которые были определены вами, вы можете пометить свои классы как «запечатанные» (изменить: [или установить «ProxyCreationEnabled» на false] (http://stackoverflow.com/ a/7277885/743382)), но это означает отсутствие отслеживания изменений, отсутствие ленивой загрузки и т. д., поскольку эти функции реализованы путем переопределения методов на ваших классах. – hvd
Возможный дубликат [Сериализуемые классы и динамические прокси в EF - как?] (Http://stackoverflow.com/questions/7276507/serializable-classes-and-dynamic-proxies-in-ef-how) – hvd