SubSonic генерируется схема БД, двоичные типы? - PullRequest
1 голос
/ 13 сентября 2009

Как создать двоичные столбцы в БД с помощью 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.

Мысли? И заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 13 сентября 2009

У меня было , думал у нас был бинарный анализатор - оказывается, это не сработало. Мне нужно добавить это - еще лучше, если вы не возражаете разветвлять то, что у нас есть, и добавить это - я бы вас за это любил. Посмотрите на наши дополнения - вы хотите изменить мод ToDataTable () (я думаю) ...

Если у вас не будет шанса - я добавлю это, когда снова включу SimpleRepo ...

0 голосов
/ 24 октября 2009

Я только что столкнулся с проблемой двоичной колонки. Если у вас есть патч / исправление, я бы хотел его протестировать.

...