Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .NET > LINQ to SQL: добавление новой строки в БД |
Автор: RWander 28.12.2007, 20:44 | ||||||||
начал изучать LINQ. Создал таблицу:
Создаю класс, который будет хранить одну строку таблицы Student:
теперь пытаюсь добавить новую строку в таблицу:
выдает ошибку:
не могу понять, где ошибка |
Автор: Idsa 29.12.2007, 03:17 |
Автоинкрементное оно у тебя в СУБД. |
Автор: RWander 29.12.2007, 09:39 | ||
если я пишу
то выдается та же ошибка |
Автор: mr.DUDA 29.12.2007, 11:44 |
Попробовать -1 или 0. |
Автор: RWander 29.12.2007, 11:57 |
Если вы имеете ввиду присвоить ID = -1, то все равно та же ошибка |
Автор: JimCary 28.1.2008, 08:42 |
А не существует ли возможности при создании класса Student задать, что поле ID автоинкрементное, может тогда все заработает. |
Автор: bullterier 15.2.2008, 16:41 |
попробуй в атрибуте [Column(....)] добавить : IsDbGenerated = true |
Автор: xni 24.7.2008, 15:51 | ||
Аналогичная ошибка. Вы разобрались? Вот что интересно -- просматриваю лог свего DataContext и вот что вижу:
В таблице всего 2 поля: ID (счётчик) и Statis_name (текст). Может быть дело в том, что я работаю с базой данных Access? Может с SQL Server будет иначе? |
Автор: Idsa 24.7.2008, 16:14 | ||
Судя по всему, в базе Id объявлен как Identity. Тогда при объявлении Id не хватает http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute.isdbgenerated.aspx (обратите внимание на примечание и пример). А в этом же примере происходит следующее: 1. При создании объекта сущности в Id хранится 0 (значение по умолчанию для int) 2. При добавлении сущности составляется запрос на вставку значений во все поля, кроме тех, которые помечены атрибутом IsDbGenerated. Т. к. Id не помечен этим атрибутом, получится примерно следующий запрос:
3. Естественно, на попытку вставить значение в Identity поле Sql Server среагирует Exception'ом. xni, Вы тоже ручками генерировали модель? Генерируйте дизайнером, не усложняйте себе жизнь. Если Вы только начинаете проект или изучаете для себя, взгляните лучше на Entity Framework. Гораздо более мощная и перспективная ORM. |
Автор: xni 24.7.2008, 18:34 |
Благодарю! А со своей проблемой, я кажется, разобрался -- не знаю верно ли я понял или нет, но в Access 2007 поле типа "счётчик" всё равно трбует заполнения. Когда было выставлено IsDbGenerated = true оно не передавало значение счётчика, из-за чего возникала ошибка. Теперь ввожу ID вручную. Это неудобно, но работает... |
Автор: PashaPash 24.7.2008, 20:48 |
xni, Linq to SQL вроде не поддерживает access вообще. Странно что хоть как-то работает. |
Автор: PashaPash 25.7.2008, 16:57 |
Можно заставить заработать - еще не значит что он поддерживает. По ссылке же прямо так и написано. Т.е. что-то работать будет, но в живом проекте лучше не использовать. |
Автор: Idsa 25.7.2008, 17:22 |
PashaPash, я же так и написал: есть ряд ограничений. Естественно, в реальных проектах использовать Linq To Sql с Access не имеет смысла. |