#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. Спасибо за обновление. Я задавался вопросом, почему я не могу прокомментировать… Я просто хотел указать свое имя в качестве тестировщика, если это необходимо.