Вставка сущности в таблицу SQL Compact 4 с колонкой Identity с помощью LINQPad - PullRequest
1 голос
/ 27 мая 2011

Я пытаюсь вставить новые записи в базу данных SQL CE 4 с помощью LINQPad и у меня возникают проблемы с идентификацией таблицы.Допустим, у меня есть эта простая таблица, например:

PEOPLE
Id int IDENTITY(1,1) NOT NULL,
Name nvarchar(100) NOT NULL

Возможно, я делаю что-то не так, но я попробовал это в LINQPad

People person = new Person { Name = "Bob" };
People.InsertOnSubmit(person);
SubmitChanges();

Но я получаю SqlCeException с указанием

"The colum cannot be modified. [ Column name = Id ]"

Я могу просто вставить запись с SQL, которая работает без ошибок от SQL CE или его поставщика данных, и SQL CE устанавливает для меня столбец Id, что я и хочу

INSERT INTO PEOPLE (Name) VALUES ('Bob');

Есть еще один шаг, который я пропускаю?Я даже не уверен, что это проблема с LINQPad, но подумал, что я все равно спрошу, потому что именно с этим я сейчас и пробую этот код.

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Что вы получите, если запустите это в LinqPad

(from dm in this.Mapping.GetTable(typeof(People)).RowType.DataMembers 
    select new  { dm.DbType, dm.Name, dm.IsPrimaryKey , dm.IsDbGenerated }
 ).Dump();

В частности, насколько я понимаю, IsDbGenerated должно быть истинно для столбца id.

У меня есть файл данных SQL CE 3.5, который я использовал ранее в LinqPad, и, глядя на SQL, сгенерированный для вставок, он не упоминает id

1 голос
/ 27 мая 2011

Возможно, это проблема с файлом dbml. Проверьте, помечен ли столбец как идентификатор (или как это называется в L2S). Дело в том, что идентификатор не может появиться в запросе вставки.

...