Редактирование автоматически сгенерированного файла DMBL для службы WCF - PullRequest
2 голосов
/ 18 сентября 2008

В нашем проекте у нас есть стандартный автоматически сгенерированный файл designer.cs, связанный с файлом DBML, который содержит все наши классы объектов, которые отображаются в таблицы нашей базы данных.

Мы хотим передать эти объекты напрямую через Службу WCF, и поэтому их необходимо декорировать с помощью атрибутов [DataContract] и [DataMember], где это уместно. Каков наилучший подход к этому, чтобы изменения не уничтожались при повторном создании файла designer.cs при изменении схемы базы данных или каких-либо других изменениях.

Частичные классы являются опцией, но если свойство, которое я хочу украсить атрибутом DataMember, уже определено в автоматически создаваемом файле designer.cs, то я не могу добавить то же определение свойства в частичный класс, поскольку это означает, что свойство будет определен дважды.

Ответы [ 2 ]

3 голосов
/ 18 сентября 2008

Установка однонаправленного режима сериализации DBML украсит классы и ряд членов требуемыми атрибутами, однако некоторые из ассоциаций будут игнорироваться, чтобы избежать циклических ссылок, которые были проблемой до SP1.

Если вы хотите, чтобы это тоже было, проверьте мой шаблон LINQ to SQL T4 , который предоставляет полные SP1-совместимые атрибуты DataContract (раскомментируйте строку data.SerializationMode = DataContractSP1 в файле DataClasses.tt), а также разрешите настроить любые другие части процесса генерации кода DBML для C # / VB.NET.

0 голосов
/ 18 сентября 2008

Файлы dbml предоставляют частичные классы, поэтому вы можете создать новый файл .cs, определить частичный класс, который вы хотите расширить, а затем украсить его требуемыми атрибутами. Например, если у вас есть сгенерированный контекст данных, который выглядит как

public partial class MyDataContext : System.Data.Linq.DataContext
{
...
}

Вы можете определить следующее в отдельном файле .cs:

[DataContract]
public partial class MyDataContext
{
...
}

Таким образом, вы можете расширять сгенерированные классы, не беспокоясь о том, что они будут перезаписаны при повторной генерации вашего dbml-файла.

...