SqlMetal может выдавать файл сопоставления XML из входного файла DBML с помощью переключателя /map[:file]
. Это удаляет атрибуты из сгенерированных файлов классов, что на шаг ближе к POCO - вам просто нужно помнить, чтобы инициализировать ваши экземпляры контекста данных из файла отображения XML.
Удаление ссылок EntitySet<T>
и EntityRef<T>
сложнее, и я не уверен, что это то, что я бы порекомендовал, поскольку вы потеряете много полезных функций. Однако это возможно - вам нужно вручную манипулировать файлом DBML, который вы передаете в SqlMetal, удаляя все элементы <Association>
. Вы можете сделать это, используя LINQ to XML, например, в качестве пользовательского шага в процессе сборки.
Это в основном отключит ассоциации в выходном файле отображения и классах, так как SqlMetal будет генерировать код EntitySet / EntityRef только для <Association>
отображений. Однако вы теряете возможность автоматически управлять отношениями родитель-ребенок.
Это даст вам довольно близкий шаблон POCO - единственное, что вы получите, это реализация INotifyPropertyChanging
, но я думаю, что вы могли бы оправдать это, поскольку она довольно общая.
Если это не соответствует вашим потребностям, вы можете посмотреть на создание собственного кода - посмотрите Шаблоны T4 для LINQ to SQL , который работает в VS 2008 и основан на SqlMetal, но у вас есть возможность полностью настроить вывод в соответствии с вашими потребностями, поскольку он использует T4 для спецификации шаблона и генерации вывода.