Проблемы с динамическими прокси-серверами EF, когда служба кэша Azure Appfabric используется в качестве поставщика состояния сеанса

Мы пытаемся перенести наше локальное приложение SAAS на Windows Azure, и мы использовали много Entity Framework специально для модуля. В рамках миграции мы пытаемся выполнить миграцию и тестирование приложения поэтапно. Мы пытаемся использовать службу кеширования приложений Azure в качестве поставщика состояния сеанса.

Когда я пытаюсь настроить состояние сеанса в кеш-память appfabric, с которой мы сталкиваемся с этими проблемами, связанными с Entity framework, пожалуйста, увидите ошибку № 2. Сначала мы получили эту ошибку № 1. Чтобы исправить эту проблему, у нас есть класс как [DataContract] и вопрос решен.

ошибка № 1. System.Runtime.Serialization.InvalidDataContractException: тип «XX.XX.XXX» не может быть сериализован. Подумайте о том, чтобы пометить его атрибутом DataContractAttribute и пометить все его члены, которые вы хотите сериализовать, с помощью атрибута DataMemberAttribute. Если тип является коллекцией, подумайте о том, чтобы пометить его атрибутом CollectionDataContractAttribute. Информацию о других поддерживаемых типах см. В документации Microsoft .NET Framework.

ошибка № 2. Невозможно задать свойство AdXXXXXX для типа CaXXXXX_9FDDBE5B2C99F9C5DE2E0DCD2E8CC77D2CB59220D1A3413E91AF5A2B6A23026D, поскольку для коллекции уже задано значение EntityCollection.

Мы совершенно не понимаем, как исправить эти проблемы, и при поиске в Google пара потоков сообщает, что нам нужно удалить модификатор виртуального доступа для свойств. Но тот же код работает без каких-либо проблем, подобных этой, локально, и код автоматически генерируется EF при каждом обновлении модели. У нас также есть другой вариант перехода к SQLAzure в качестве поставщика состояния сеанса во втором случае, но мы надеемся, что могут существовать те же проблемы, что и данные, которые необходимо сериализовать при сохранении в сеансе.

http://social.msdn.microsoft.com/forums/en/adonetefx/thread/99d8d4a1-5ab1-42dc-b9db-5087be02162d https://blog.iannelson.uk/entity-framework-week-part-3-обнаруженныепроблемывовремявыполнения/

Мы не используем отложенную загрузку, и классы генерируются EF автоматически, когда мы обновляем модель из базы данных.


person CSKR    schedule 13.04.2012    source источник


Ответы (1)


Не могли бы вы попробовать удалить ключевое слово virtual из всех свойств, кроме тех, которые вы используете для свойств отложенной загрузки / навигации (т. Е. Удалить его из всех собственных типов)?

Ссылка: Код Первое добавление в коллекции? Как использовать Code First с репозиториями?

person Sandrino Di Mattia    schedule 13.04.2012
comment
Мы не используем отложенную загрузку, и классы генерируются EF автоматически, когда мы обновляем модель из базы данных. У нас нет никакого контроля над классами, созданными EF. или нам нужно удалить виртуальные свойства вручную. - person CSKR; 13.04.2012
comment
Нет, я бы не стал удалять виртуальное ключевое слово вручную. Не могли бы вы отключить отслеживание изменений: context.SomeTable.MergeOption = MergeOption.NoTracking; - person Sandrino Di Mattia; 13.04.2012
comment
Где мы можем добавить опцию MergeOption.NoTracking для таблиц. В основном мы пытались добавить свойства, но все равно получали ту же проблему. - person CSKR; 16.04.2012
comment
Мы можем каким-то образом решить указанную выше проблему, добавив DataContract и DataMembers к членам автоматически сгенерированного класса без удаления виртуального ключевого слова, но по-прежнему не смогли найти полное решение для хранения объектов сущностей в Azure Appfabric с использованием состояния сеанса. Мы получаем ошибку. Тип «System.Collections.Generic.ICollection`1 [SB.Mpm.Entity.Client]» не может быть сериализован, когда метод возвращает коллекцию. - person CSKR; 16.04.2012