2013-06-23 4 views
3

Я пытаюсь изучить функциональность ServiceStack.OrmLite и не могу понять, можно ли использовать класс загрузки для конфигурации (внешние ключи, типы данных, индексы столбцов, псевдонимы и т. Д.)? Я не хочу использовать атрибуты аннотации данных для моих классов сущностей. Даже использование каких-то конфигураций было бы лучше, чем атрибуты. Это потому, что я хочу иметь возможность заменить ORM в будущем. Может быть, существует сторонняя библиотека для быстрой настройки?Возможно ли использовать атрибуты аннотаций данных ServiceStack OrmLite?

ответ

1

ServiceStack OrmLite создает схемы, основанные на кодовых первых POCOs. Добавление атрибутов - это удобство для изменения схемы таблиц, созданных sql, если вы хотите, чтобы OrmLite создавал для вас таблицы. Если вы не хотите использовать атрибуты, тогда вручную создайте SQL-схему в своей базе данных вне диапазона или после создания таблиц удалите атрибуты.

Или используйте другой ORM, OrmLite никогда не будет поддерживать сопоставления, хранящиеся в конфигурационных файлах времени исполнения, что противоречит его кодовой концепции.

+0

Спасибо! Мне кажется, что я начинаю понимать основную концепцию ServiceStack OrmLite. Но разве было бы неплохо иметь свободный API (например, NHibernate или EF), чтобы помочь настроить схему SQL? Как я вижу, для этого ORM нет API-интерфейсов конфигурации, и он никогда не планировался. – user2452329

+0

В этом нет никакой ценности, нет ничего, что помешало бы повторному использованию атрибутов POCO, поскольку они доброкачественны для fx, которые не используют его. Аналогично, вы можете удалить атрибуты всего проекта с помощью нескольких регулярных выражений. Все, что надувает + усилие для реализации отдельного источника конфигурации, на самом деле не создает дополнительную ценность, просто нужно ублажать некоторые эстетические предпочтения разработчика, что не является отличной стратегией, если ваша цель состояла в том, чтобы сохранить чистую и суровую базу кода. – mythz

+0

Я не могу полностью согласиться с последним утверждением, потому что, если вы помещаете модели в отдельную сборку, тогда необходимо собрать ссылку на сборку orm и ее необходимо развернуть вместе с ней. Но тем не менее я ценю ваши аргументы о чистой и суровой кодовой базе. – user2452329

6

Не существует свободного отображения для ServiceStack.OrmLite. Я разделяю ваше нежелание ссылаться даже на сборку DataAnnotations из моих определений моделей. Мне нравится, что мой POCO чист, как в совершенно чистом виде: отдельный в своей сборке, не ссылаясь на какие-либо сторонние сборки. Это не столько эстетика, сколько способы извращения моей руки, чтобы избежать соблазнов делать короткие вещи, которые ломают хороший дизайн. Мне нравится - если это не чистый ORM, это просто плотно связанный DAL, и тогда все это зря.

В любом случае - вы можете аннотировать свои классы POCO при начальной загрузке/имп. вид места - это действительно совершенно очевидно: используйте отражение и добавьте атрибут во время выполнения, например.

typeof (User).GetProperty("Id") 
    .AddAttributes(new AutoIncrementAttribute()); 

Тот же принцип любого атрибута OrmLite (и любого атрибута, действительно).

Я нашел подсказку в модульных тестах для OrmLite, на самом деле есть блок-тест Can_add_AutoIncrement_Id_at_runtime(). Хотя это, по сути, модульное тестирование .NET-ядра, а не просто OrmLite. В любом случае, спасибо, парень-тестер.