ASP.NET MVC: как я могу сериализовать данные из экземпляров классов, сгенерированных Linq2Sql? - PullRequest
1 голос
/ 03 сентября 2010

Я научился создавать многошаговое приложение из книги Стива Сандерсона (Pro ASP.Net MVC / APress p.477).С тех пор я адаптировал эту технику ко многим сценариям.По сути, речь идет о сериализации / десериализации для сохранения данных между запросами.

Но единственная проблема в том, что я не могу использовать модель, сгенерированную Linq2Sql, потому что MVC будет жаловаться, что теклассы не помечены [serializable] .

Так что я делаю явное преобразование .Я создаю один и тот же класс, чтобы соответствовать классу, созданному Linq2Sql: Итак, я получаю дважды одинаковый контент с немного разными именами.Например, Client и ClientData, Product и ProductData, Registration и RegistrationData и т. Д. Каждая пара содержит абсолютно одинаковые свойства.

Пример: Чтобы обработать экземпляр клиента,

  1. Я извлекаю его из БД, используя Linq2Sql, полагаясь на его id
  2. Я преобразую экземпляр Client, извлеченный из БД, в экземпляр ClientData, используя статический метод, который просто присваивает значения свойств одного экземпляра другим.
  3. После обработки я делаю наоборот: я преобразую экземпляр ClientDataв клиент и сохранить его в БД с помощью Linq2Sql.

Затем я должен написать бесполезный код и начать забывать, какой из них что делает. Вопрос: Могу ли я использовать какие-либо методы, чтобы избежать явного преобразования и все же иметь возможность сериализации данных из экземпляров классов, сгенерированных Linq2Sql.

Ниже приведен тип метода, который я использую для преобразования экземпляра одного типа в экземпляр другого типа.У меня есть 2 способа, один для получения данных, а другой для сохранения в БД.

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 Ответ

2 голосов
/ 03 сентября 2010

Важно ли, чтобы они были украшены [Serializable]? Или просто, что они сериализуемы ? В последнем случае используйте следующую опцию с sqlmetal: / serialization: Unidirectional, которая добавит атрибуты DataMember и DataContract по мере необходимости Другим вариантом является создание ваших классов LinqToSql самостоятельно. Этот вариант предлагает наиболее мощную и долгосрочную гибкость, но его нетривиально. (Я использую шаблоны T4 для этого)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...