ASP.NET MVC:如何从Linq2Sql生成的类实例中序列化数据?

时间:2010-09-03 17:46:50

标签: asp.net-mvc linq-to-sql serialization

我已经学会了从 Steve Sanderson的一书(Pro ASP.Net MVC / APress p.477)创建多步骤应用程序。从那以后,我将这种技术应用于许多场景。基本上,它是关于序列化/反序列化来保持请求之间的数据。

但唯一的问题是我不能使用Linq2Sql生成的模型,因为MVC会抱怨这些类没有标记为 [serializable]

所以我做了明确的转换。我创建了相同的类来匹配Linq2Sql创建的类:所以,我得到两个相同的内容,略有不同的名称。例如,Client和ClientData,Product和ProductData,Registration和RegistrationData等。每对包含完全相同的属性。

示例:要处理客户端实例,

  1. 我使用Linq2Sql依赖于 id
  2. 从数据库中取出它
  3. 我使用静态方法将从DB中提取的客户端实例转换为ClientData实例,该方法只是将一个实例属性的值分配给另一个实例。
  4. 处理后我反过来:我将ClientData实例转换为Client并使用Linq2Sql将其保存在DB中。
  5. 然后我必须编写无用的代码并开始忘记哪一个做了什么。问题:我是否可以使用任何技术来避免显式转换并且仍然能够从Linq2Sql生成的类的实例序列化数据。

    下面是我用来将一种类型的实例转换为另一种类型的实例的方法类型。我有两种方法,一种是获取数据,另一种是保存到数据库。

    public static Client Translate_Client_Into_ClientData(Client client)
    {
      return new ClientData()
      {
        ClientID = client.ClientID,
        FirstName = client.FirstName,
        LastName = client.LastName
        //And so and so ...
      }
    }
    

    看起来我不是在干涸,而是变湿......就这样。

    感谢您的帮助

1 个答案:

答案 0 :(得分:2)

用[Serializable]装饰它们很重要吗?或者只是他们 可序列化?如果是后者,请在sqlmetal中使用以下选项:/ serialization:Unidirectional,它将根据需要添加DataMember和DataContract属性。另一个选择是自己生成LinqToSql类。该选项提供了迄今为止最强大的功能和长期灵活性,但要实现这一目标并非易事。 (我使用T4模板)