2015-08-15 5 views
1

Только что начал играть с Servicestack и Ormlite (SqlServer). Я искал способ создания таблиц автоматически, если они не существуют. Я нашел:Auto Create Tables ServiceStack.OrmLite

CreateTableIfNotExists<T> 

это круто, но в любом случае либо реализовать интерфейс, который будет «расположенный» и автоматически созданный или способ придать их где-нибудь, чтобы они автоматически созданы?

Было бы просто реализовать что-то вроде этого, я просто не хотел изобретать велосипед, если он уже был там.

ответ

0

OrmLite - это первый в коде код POCO ORM, который не требует каких-либо базовых классов или интерфейсов, поэтому в основном это зависит от вашего приложения, которое POCO должно использоваться в OrmLite для создания таблиц RDBMS.

Вы можете реализовать это самостоятельно, ищите POCO, у которых есть либо явный атрибут , либо [PrimaryKey]. (Также строго требуется, поскольку OrmLite также предполагает, что свойство Id также определяет первичный ключ).

Какой будет выглядеть так:

var tables = assembly.GetTypes() 
    .Where(x => x.GetProperties() 
     .Any(p => p.HasAttribute<AutoIncrementAttribute>() || 
        p.HasAttribute<PrimaryKeyAttribute>())) 
    .ToArray(); 

db.CreateTableIfNotExists(tables); 

Лично я бы не сделать это, как я думаю, что это важно, чтобы быть явными и декларативными, о котором таблицы должны получить создан, он также служит в качестве опорной точки, где все таблицы используемый в вашем приложении, позволяет вам легко перейти к определениям каждой из таблиц с помощью Ctrl + Click (в R #).

+0

Спасибо за ответ. Я вижу, что вы говорите. Просто подумал, что было бы удобно регистрировать все типы в контейнере сортов, которые должны быть созданы, если они не существуют. – Wjdavis5

+0

@ Wjdavis5 Если вы зарегистрируете каждую таблицу в своем приложении с помощью 'db.CreateTableIfNotExists ()', то ваше приложение будет работать, не было ли создано никаких таблиц, некоторые из созданных таблиц или все созданные таблицы. Почему я думаю, что все они должны быть определены, поэтому они не зависят от заранее определенного внешнего состояния. – mythz