Я думаю, что для системы без существующей базы данных автоматические сопоставления NHibernate + FluentNHibernate стоили бы:
http://wiki.fluentnhibernate.org/show/AutoMapping
Раньше я не использовал autoppings (мне дали схему), они будут моей первой идеей для изучения.
Второй вариант, и, вероятно, более надежный / проверенный - это ActiveRecord:
http://www.castleproject.org/activerecord/index.html
Опять же, я тоже этим не пользовался, но я полагаю, что вы помечаете свои сущности атрибутами для указания сопоставления.
Ключом к обоим из них является то, что NHibernate может экспортировать сопоставление в базу данных, создавая таблицы автоматически.
Я также понятия не имею, как это влияет на Silverlight.
В ответ на комментарий (здесь легче набрать, чем комментарий):
Что поддерживает NHibernate, так это возможность взять файлы сопоставления, определенные в проекте, и экспортировать их в базу данных. Это означает, что вы определяете свою схему один раз (ваше приложение).
Теперь обычно эти файлы сопоставления представляют собой xml. Это не имеет большого значения, но, очевидно, возможности для улучшения.
FluentNHibernate позволяет вам (а) определять файлы сопоставления в коде или (б) автоматически создавать файлы сопоставления из ваших сущностей в соответствии с соглашением. Я использую метод (а), потому что мой БД ужасен и в этом мире нет соглашения для него, но для вашего использования я бы порекомендовал (б), который является автоматическим. Приведенная выше ссылка на вики дает быстрый пример того, как можно сопоставить продукт и полку.
Active Record работает, позволяя вам определять схему не в XML, а как атрибуты вашей сущности. Это намного больше, чем это, хотя он также реализует шаблон ActiveRecord, который использует RoR (Entity.Save и т. Д.). Я никогда не использовал это, но это широко используется.
Одной из замечательных особенностей генерации схемы NHibernate является модульное тестирование. Я могу создать тестовую базу данных в SQL Lite в несколько строк кода, экспортировать схему, заполнить тестовыми данными, запустить тест и разобрать его. Это облегчает интеграционное тестирование, а также помогает проверить правильность работы запросов.
Я не знаю, являются ли это лучшими решениями, поскольку я действительно использую только NHibernate, поэтому не могу комментировать Linq2SQL, EF или другие ORM.