Я пытаюсь изучить функциональность ServiceStack.OrmLite и не могу понять, можно ли использовать класс загрузки для конфигурации (внешние ключи, типы данных, индексы столбцов, псевдонимы и т. Д.)? Я не хочу использовать атрибуты аннотации данных для моих классов сущностей. Даже использование каких-то конфигураций было бы лучше, чем атрибуты. Это потому, что я хочу иметь возможность заменить ORM в будущем. Может быть, существует сторонняя библиотека для быстрой настройки?Возможно ли использовать атрибуты аннотаций данных ServiceStack OrmLite?
ответ
ServiceStack OrmLite создает схемы, основанные на кодовых первых POCOs. Добавление атрибутов - это удобство для изменения схемы таблиц, созданных sql, если вы хотите, чтобы OrmLite создавал для вас таблицы. Если вы не хотите использовать атрибуты, тогда вручную создайте SQL-схему в своей базе данных вне диапазона или после создания таблиц удалите атрибуты.
Или используйте другой ORM, OrmLite никогда не будет поддерживать сопоставления, хранящиеся в конфигурационных файлах времени исполнения, что противоречит его кодовой концепции.
Не существует свободного отображения для ServiceStack.OrmLite. Я разделяю ваше нежелание ссылаться даже на сборку DataAnnotations из моих определений моделей. Мне нравится, что мой POCO чист, как в совершенно чистом виде: отдельный в своей сборке, не ссылаясь на какие-либо сторонние сборки. Это не столько эстетика, сколько способы извращения моей руки, чтобы избежать соблазнов делать короткие вещи, которые ломают хороший дизайн. Мне нравится - если это не чистый ORM, это просто плотно связанный DAL, и тогда все это зря.
В любом случае - вы можете аннотировать свои классы POCO при начальной загрузке/имп. вид места - это действительно совершенно очевидно: используйте отражение и добавьте атрибут во время выполнения, например.
typeof (User).GetProperty("Id")
.AddAttributes(new AutoIncrementAttribute());
Тот же принцип любого атрибута OrmLite (и любого атрибута, действительно).
Я нашел подсказку в модульных тестах для OrmLite, на самом деле есть блок-тест Can_add_AutoIncrement_Id_at_runtime()
. Хотя это, по сути, модульное тестирование .NET-ядра, а не просто OrmLite. В любом случае, спасибо, парень-тестер.
Спасибо! Мне кажется, что я начинаю понимать основную концепцию ServiceStack OrmLite. Но разве было бы неплохо иметь свободный API (например, NHibernate или EF), чтобы помочь настроить схему SQL? Как я вижу, для этого ORM нет API-интерфейсов конфигурации, и он никогда не планировался. – user2452329
В этом нет никакой ценности, нет ничего, что помешало бы повторному использованию атрибутов POCO, поскольку они доброкачественны для fx, которые не используют его. Аналогично, вы можете удалить атрибуты всего проекта с помощью нескольких регулярных выражений. Все, что надувает + усилие для реализации отдельного источника конфигурации, на самом деле не создает дополнительную ценность, просто нужно ублажать некоторые эстетические предпочтения разработчика, что не является отличной стратегией, если ваша цель состояла в том, чтобы сохранить чистую и суровую базу кода. – mythz
Я не могу полностью согласиться с последним утверждением, потому что, если вы помещаете модели в отдельную сборку, тогда необходимо собрать ссылку на сборку orm и ее необходимо развернуть вместе с ней. Но тем не менее я ценю ваши аргументы о чистой и суровой кодовой базе. – user2452329