LINQtoSQL和序列化

时间:2011-08-25 23:22:01

标签: asp.net linq-to-sql data-access

我是LINQtoSQL的新手。我之所以选择学习它,是因为我没有太多在SQL中编写存储过程的经验,并认为LINQtoSQL可能是另一种进行数据访问的方法。无论如何,我创建了一个简单的ASP.NET应用程序,其中包含几个简单的Web表单,可以从用户那里收集一些数据。

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

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

System.Runtime.Serialization.SerializationException:在程序集'System.Data.Linq中输入'System.Data.Linq.ChangeTracker + StandardChangeTracker',Version = 4.0.0.0,Culture = neutral,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 个答案:

答案 0 :(得分:0)

Kirk的评论实际上是回答你的问题。我再给你一个建议 - 如果你是ORM中的“tabula rasa”,很快就会忘记使用LinqToSql的不愉快体验并尝试新的Entity Framework。它是一个更强大,更灵活的解决方案(具有类似的视觉设计师和围绕它的“魔术”),但它允许您使用POCO作为您的实体类 - 您可以使其可序列化,或以任何其他方式调整它。 / p>