LINQtoSQL и сериализация - PullRequest
       9

LINQtoSQL и сериализация

4 голосов
/ 26 августа 2011

Я новичок в LINQtoSQL.Я решил изучить его, потому что у меня не было большого опыта написания хранимых процедур на SQL, и я подумал, что LINQtoSQL может быть альтернативным способом доступа к данным.Так или иначе, я создал простое приложение ASP.NET с парой простых веб-форм, которые собирают некоторые данные от пользователя.

Затем я добавил объект данных LINQtoSQL (файл dbml) в свой проект.Подключил его к источнику данных в моей базе данных SQL и позволил оператору OR / Designer создать магию для создания объекта для меня.Все казалось слишком хорошим, чтобы быть правдой.Пока я не сохранил данные, собранные в моих веб-формах, обратно в базу данных.Именно здесь я начал узнавать о проблемах сериализации с LINQtoSQL.

В частности, мои веб-формы собирают данные в несколько этапов.Как и любой разработчик ASP, я храню эти данные в ViewState по мере прохождения Page LifeCycles.Наконец, когда в моем ViewState есть все необходимые данные, нажмите кнопку отправки, чтобы отправить их в базу данных, используя объектный объект LINQtoSQL.И именно здесь я начинаю получать исключение сериализации:

System.Runtime.Serialization.SerializationException: введите 'System.Data.Linq.ChangeTracker + StandardChangeTracker' в сборке 'System.Data.Linq, версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 'не помечен как сериализуемый.

Я посмотрел в Интернете.Я знаю, что моя единственная сущность LINQtoSQL (которую я назначаю из моего ViewState) является seiralizable, так как она украшена обязательными атрибутами DataContract и DataMember.После долгих чтений я попробовал решение, данное Брейном Орреллом, по следующей ссылке, которая требует предоставления собственного сериализатора.Это кажется очень сложным для того, чего я пытаюсь достичь (простая запись части данных в базу данных), и исключения сериализации все еще не исчезли.Хотя, как ни странно, моя сущность теперь правильно записывается в базу данных:

http://borrell.parivedasolutions.com/2008/02/linq-to-sql-updating-in-aspnet-right.html

Мой вопрос заключается в том, как правильно и просто передать данные ViewState сущности LINQtoSQL, чтобыэто может быть записано в базу данных.И если кто-то знает конкретный, но хороший пример для подражания, я буду признателен за это.В противном случае я могу опубликовать код из моего собственного проекта, и мы можем перейти оттуда.

Спасибо, если заранее.

Fike

1 Ответ

0 голосов
/ 08 сентября 2011

Комментарий Кирка фактически является ответом на ваш вопрос. Я просто даю вам еще одно предложение - если вы являетесь «tabula rasa» в ORM, быстро забудьте о неприятном опыте с LinqToSql и попробуйте новую Entity Framework. Это гораздо более надежное, гибкое решение (с похожим визуальным конструктором и «магией» вокруг него), но оно позволяет вам использовать POCO в качестве классов сущностей - вы можете сделать его сериализуемым или настроить его любым другим необходимым способом.

...