2011-08-25 57 views
4

我是LINQtoSQL的新手。我选择了解它,因为我在SQL中编写存储过程的经验并不多,并且认为LINQtoSQL可能是另一种数据访问的方式。无论如何,我用一些简单的Web表单创建了一个简单的ASP.NET应用程序,用于从用户那里收集一些数据。LINQtoSQL和序列化

接下来,我添加了一个LINQtoSQL数据对象(DBML文件)到我的项目。将它连接到我的SQL数据库中的一个DataSource,并允许OR/Designer为我创建一个实体。一切似乎都太好,不可能是真的。直到我将我在网络表单中收集的数据保存到数据库。那是我开始学习LINQtoSQL序列化问题的地方。

具体问题是我的网页表单以多个步骤收集数据。像任何ASP开发人员一样,当我浏览Page LifeCycles时,我将这些数据存储在ViewState中。最后,一旦我的ViewState拥有了所有需要的数据,点击提交按钮将它发送到使用LINQtoSQL实体对象的数据库。这是我开始获取序列化异常的地方:

System.Runtime.Serialization.SerializationException:在程序集'System.Data.Linq,版本= 4.0.0.0,文件中键入'System.Data.Linq.ChangeTracker + StandardChangeTracker' =中立,PublicKeyToken = b77a5c561934e089'未标记为可序列化。

我环顾网络。我知道我唯一的LINQtoSQL实体(我从ViewState分配的)是可选择的,因为它是用所需的DataContract和DataMember属性装饰的。经过多次阅读,我尝试了以下链接中Brain Orrell给出的解决方案,该链接要求提供您自己的序列化程序。对于我试图实现的内容(将一段数据简单写入数据库)来说似乎非常复杂,并且序列化异常仍然没有消失。虽然,奇怪的是,我的实体正确地写入到现在的数据库:

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

我的问题是,什么是正确的,一个简单的方法来ViewState的数据传递给LINQtoSQL实体,以便它可以被写入数据库。如果有人知道一个具体但很好的例子,我会很感激。否则,我可以从我自己的项目发布代码,我们可以从那里去。

如果提前致谢。

Fike

+1

'[DataContract]'!='[Serializable接口]'(更精确地说,东西是只标有'[Serializable接口]'*可以通过*'DataContractSerializer'但事情处理标有唯一的'[ DataContract]'不由'[Serializable]'序列化器处理(如'BinaryFormatter')。) –

回答

0

柯克的评论其实是回答你的问题。我只是再给你一个建议 - 如果你是ORM中的“tabula rasa”,很快就会忘记使用LinqToSql的不愉快经历并尝试新的实体框架。它是更健壮,更灵活的解决方案(使用类似的视觉设计器和它周围的“魔术”),但它允许您使用POCO作为实体类 - 您可以使其可以序列化,或以任何其他需要的方式调整它。