Linq-to-SQL Design вопрос! - PullRequest
       16

Linq-to-SQL Design вопрос!

4 голосов
/ 12 января 2010

Что если вам нужно создать объекты POCO из файла dbml? Вы используете генератор и кто? Вы пишете POCO's вручную? Скажем, вы хотите сделать свои объекты постоянными и игнорировать их, а затем создать шаблон DAO для связи между объектами Client - DAO - L2S. Это вопрос для автономного проектирования с использованием Linq 2 SQL. Предполагается, что POCO, использующий клиента, должен быть настолько же примитивным, насколько они могут быть без зависимостей (EntityRef <>, EntitySet <>, Attributes и т. Д.), И, конечно, вы можете привести объект L2S в POCO с соответствующими данными. Любая помощь и любые исправления в концепции будут действительно полезны!

Ответы [ 3 ]

4 голосов
/ 12 января 2010

Я хотел бы сказать «подожди EF в .NET 4.0», что значительно улучшило поддержку POCO (по сравнению с током EF) и, надеюсь, шаблон POCO T4 в VS2010.

В данный момент SqlMetal будет излучать богатые объекты; в то время как LINQ-to-SQL может работать с типами POCO, вам придется самостоятельно писать POCO или использовать xslt / T4 / что угодно в dbml.

3 голосов
/ 12 января 2010

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 для спецификации шаблона и генерации вывода.

2 голосов
/ 08 августа 2010

Мы также используем Linq2Sql и нам нужно написать собственные классы моделей из результатов L2S. После долгих поисков я нашел Шаблоны POCO T4 для Linq2Sql и EF , которые используют файлы .dbml или .edmx в качестве источника и создают собственные объекты POCO. Ссылка для скачивания внизу статьи или дублируется здесь . Мы использовали его в качестве основы, а затем настроили его для наших нужд.

...