Страница 1 из 1

Таблица с одной колонкой

Добавлено: Пт 17 янв 2014 08:42
infectioni
Доброго времени суток, вопрос следующий:
У меня есть MVC-приложение C# + Razor, в качестве СУБД - PostgreSQL, и Entity Framework с devart dotConnect for PostgreSQL.

В базе есть табличка, содержащая одну колонку (id), когда я пытаюсь добавить в неё запись:

Код: Выделить всё

var newRecord = new MY_TABLE();
context.MY_TABLE.Add(newRecord);
context.SaveChanges();
вылетает ошибка "Empty insert statement".

Если в таблицу добавить ещё одну фиктивную колонку, то добавление работает. Что это за проблема и можно ли обойтись без этого хака?

Re: Таблица с одной колонкой

Добавлено: Пт 17 янв 2014 15:40
Shalex
Мы рекомендуем Вам включить dbMonitor, чтобы определить какой именно SQL запрос отправляется в базу данных:
http://www.devart.com/dotconnect/postgr ... nitor.html
http://www.devart.com/dbmonitor/dbmon3.exe

Вероятно, Вы либо явно задали для свойства опцию DatabaseGeneratedOption.Identity, либо используете EF Code-First (в этом случае EntityKey типа int по умолчанию считается DatabaseGeneratedOption.Identity). Или у Вас Database-First подход, а в таблице колонка типа serial.

Re: Таблица с одной колонкой

Добавлено: Пн 20 янв 2014 05:45
infectioni
Использую Code-First, класс выглядит вот так:

Код: Выделить всё

public class MY_TABLE
{
   [Key]
   [ScaffoldColumn(false)]
    public long IdMyTable { get; set; }
}
Просмотрел через dbMonitor, SQL-запроса вообще никакого нет:

Re: Таблица с одной колонкой

Добавлено: Пн 20 янв 2014 15:10
Shalex
Ключ Key определяет то, что это primary key колонка. Соглашения EF делают такую колонку Identity (автоинкрементной). Наш провайдер выбирает для такой колонки тип serial. Т.е. в базе создается такая таблица:

Код: Выделить всё

CREATE TABLE my_table
(
  idmytable serial NOT NULL,
  CONSTRAINT mytable_pkey PRIMARY KEY (idmytable)
)
Какой SQL statement должен быть сгенерирован провайдером, чтобы в таблицу была добавлена новая запись на основе сгенерированного значения, и это значение было бы возвращено через RETURNING clause?

Re: Таблица с одной колонкой

Добавлено: Вт 21 янв 2014 05:19
infectioni
У меня CodeFirst, но при существующей БД, скрипт таблицы выглядит так:

Код: Выделить всё

CREATE TABLE dbo."MY_TABLE"
(
  "IdMyTable" bigint NOT NULL DEFAULT nextval('dbo."MY_TABLE_IdMyTable_seq"'::regclass),
  CONSTRAINT "PK_MY_TABLE" PRIMARY KEY ("IdMyTable")
)
Немного погуглив, нашел, что в таких случаях скрипт вставки выглядит следующим образом:

Код: Выделить всё

INSERT INTO dbo."MY_TABLE" default
VALUES;

Re: Таблица с одной колонкой

Добавлено: Вт 21 янв 2014 16:41
Shalex
Спасибо за предоставленную информацию. Мы сообщим Вам, когда генерация такого SQL будет добавлена в нашу реализацию EF провайдера.

Re: Таблица с одной колонкой

Добавлено: Пн 27 янв 2014 11:21
Shalex
Генерация SQL для класса с одним свойством, которое является Identity, добавлена в реализацию EF провайдера dotConnect for PostgreSQL. Мы сообщим Вам, когда соответствующий билд будет доступен для загрузки.

Re: Таблица с одной колонкой

Добавлено: Чт 30 янв 2014 16:59
Shalex
Новый билд dotConnect for PostgreSQL 7.2.90 доступен для загрузки: http://forums.devart.com/viewtopic.php?f=3&t=28828.

Re: Таблица с одной колонкой

Добавлено: Пт 31 янв 2014 06:33
infectioni
Уже качаю, зашел на форум сказать спасибо, спасибо!