我是LINQtoSQL的新手。我选择学习它是因为我没有太多用SQL编写存储过程的经验,并且认为LINQtoSQL可能是进行数据访问的另一种方法。总之,我创建了一个简单的ASP。. NET应用程序,使用几个简单的web表单从用户那里收集一些数据。
接下来,我向我的项目添加了一个LINQtoSQL数据对象(一个dbml文件)。将它连接到我的SQL数据库中的数据源,并允许OR/设计师为我创建一个实体。一切都好得令人难以置信。直到,我得到了保存的数据,我已经收集在我的web表单回数据库。这就是我开始了解LINQtoSQL的序列化问题的地方。
具体是我的web表单收集数据在多个步骤。像任何ASP开发人员一样,我在执行Page lifecycle时将这些数据存储在ViewState中。最后,一旦我的ViewState拥有所需的所有数据,点击提交按钮,使用LINQtoSQL实体对象将其发送到数据库。从这里开始出现序列化异常:
System.Runtime.Serialization。SerializationException:类型为System.Data.Linq。ChangeTracker+StandardChangeTracker' in Assembly 'System.Data。Linq, 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实体,这样它就可以被写入数据库。如果有人知道一个具体但好的例子,我会很感激。或者我可以从我自己的项目中发布代码,我们可以从那里开始。
提前谢谢。
"
Kirk的评论实际上是对你问题的回答。我再给你一个建议——如果你是orm的"新手",赶紧忘掉使用LinqToSql的不愉快经历,试试新的实体框架吧。它是一个更健壮、更灵活的解决方案(有类似的视觉设计器和"魔法"围绕着它),但它允许你使用poco作为你的实体类——你可以使它序列化,或者以任何其他需要的方式调整它。