Как создать двоичные столбцы в БД с помощью Subsonic Schema Builder?
Итак, сегодня вечером я решил погрузиться в SubSonic. Я вижу много вопросов здесь и отличные ответы Роба и многих других. Я вижу, что SubSonic - это ORM, с помощью шаблонов T4 он может генерировать очень хорошие и эффективные классы из существующей базы данных.
Но я хочу пойти другим путем. У меня очень богатый домен, и я хочу создать свои таблицы adhoc из моего домена с помощью SubSonic и опции RunMigrations.
Все работает очень хорошо (даже написал свою собственную функцию Upgrade (), которая определяет, есть ли изменения в кодовой базе на основе номера редакции сборки, а затем переносит все обновления объекта в БД - довольно гладко и эффективно для автоматического обновления БД ).
Но как SubSonic создает двоичные столбцы? Возможно, я не использую его по назначению (я не использую Query или SqlQuery, просто интерфейс Linq SimpleRepository). См. Ниже (с использованием распространенного примера «Сообщения блога»):
[SubsonicTable]
public class Post
{
[SubSonicPrimaryKey]
public Int32 PostID { get; set; }
[SubSonicStringLength(1024)]
public String Title { get; set; }
[SubSonicLongString]
public String Body { get; set; }
[SubSonicStringLength(5)]
public String? LangaugeCode { get; set; }
public DateTime? Published { get; set; }
public PostType PostType { get; set; }
public Int32 PostTypeID
{
get
{
return this.PostType.GetHashCode();
}
set
{
Enum.Parse(typeof(PostType), value.ToString());
}
}
public Byte[] Image { get; set; }
}
public enum PostType
{
NotSet = 0
,BlogPost
,Comment
,Trackback
,Pingback
}
Когда этот объект Post сохраняется или запрашивается через SimpleRepository, в нем отсутствуют два столбца: PostType (или тип enum PostType) и Image (тип массива byte []).
Теперь я обнаружил здесь взломанный ответ, который кто-то написал об использовании Int32 PostTypeID для решения проблемы перечисления. Давай Роб, SubSonic должен иметь возможность поддерживать типы перечисления в INT и обратно от них. ;) Вот почему у меня есть PostTypeID, и он создается и пишется правильно.
Вот пример команды, которая создает для меня таблицу Post, а также вставляет первое сообщение:
Post p = new Post();
p.Title = "My Title";
p.Body = "The body of the post.";
p.PostType = PostType.BlogPost;
var repo = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);
repo.Add(p);
ПРИМЕЧАНИЕ: Вы не должны использовать этот код в рабочей среде, так как RunMigrations имеет много дополнительных запросов TSQL при первом запуске.
Вы можете увидеть на примере выше, что это создаст таблицу Posts, если она не существует, а также создаст столбцы.
Но это не создает два столбца, упомянутых выше: PostType или Image.
Мысли? И заранее спасибо.