Дозвуковая сгенерированная схема БД, двоичные типы?

#c# #subsonic #subsonic3 #simplerepository

#c# #дозвуковая #дозвуковой 3 #simplerepository

Вопрос:

Как создавать двоичные столбцы в БД с помощью построителя схем SubSonic?

Итак, сегодня вечером я решил погрузиться в дозвуковую. Я вижу здесь много вопросов и отличные ответы Роба и многих других. Я вижу, что SubSonic — это ORM, с шаблонами T4 он может генерировать несколько очень хороших и эффективных классов из существующей базы данных.

Но я хочу пойти другим путем. У меня очень богатый домен, и я хочу создавать свои таблицы в соответствии со своим доменом, используя SubSonic и опцию RunMigrations.

Все работает чрезвычайно хорошо (даже написал свою собственную функцию Upgrade(), которая определяет, есть ли изменения в кодовой базе, на основе номера редакции сборки, а затем переносит все обновления объектов в БД — довольно гладко и эффективно для автоматического обновления БД).

Но как у вас есть дозвуковое создание двоичных столбцов? Возможно, я использую ее не по назначению (я не использую 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[] array).

Итак, я нашел здесь ответ на вопрос, который кто-то опубликовал об использовании PostTypeID Int32 для решения проблемы с перечислением. Да ладно, Роб, SubSonic должен уметь поддерживать перечисляемые типы в INT и обратно из них. 😉 Вот почему у меня есть PostTypeID, и это создается и записывается должным образом.

Вот пример команды, которая создает таблицу Post для меня, а также вставляет первый 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.

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

Ответ №1:

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

Если у вас не будет возможности — я добавлю это при следующем запуске SimpleRepo…

Комментарии:

1. Отличный Роб! Мне было интересно, примете ли вы участие в проекте. Я искал Subsonic для замены версии Linq CreateDatabase(), у которой НЕТ пути миграции. Для этого есть другие столбцы, такие как Enums (int), Xml и тому подобное. Вещи, которые Linq широко поддерживает. Я рассмотрю возможность приближения дозвуковой к этим. 🙂 Спасибо!

2. Но, конечно, так мы растем :). Посмотрите на это: subsonicproject.com/docs/Submit_Patch Мне бы пригодилась любая помощь, которую вы можете оказать…

Ответ №2:

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

Комментарии:

1. Технически, вы должны были прокомментировать, но не опубликовали ответ. Но, будучи новичком, у вас нет доступа к комментариям. 🙂 Я думаю, это происходит после того, как вы получаете около 10 баллов. В любом случае, да, я исправил это, но не проверил патч для Rob C., чтобы посмотреть. Я обнаружил, что SimpleRepository все еще использовал старые SQL-скрипты из старого Subsonic, а не новый конструктор Sql-запросов, который они используют сейчас. Хотел прокомментировать Робу С., когда произойдет переход на использование более нового материала — перед проверкой исправления для более старого материала.

2. Спасибо за обновление. Я задавался вопросом, почему я не могу прокомментировать… Я просто хотел указать свое имя в качестве тестировщика, если это необходимо.