Почему вновь созданный EF-объект выдает исключение ID is null при попытке сохранения?

Я пробую структуру сущностей, включенную в VS2010, но столкнулся с проблемой с моей базой данных/моделью, созданной из графического интерфейса.

Когда я делаю:

user = dataset.UserSet.CreateObject();
user.Id = Guid.NewGuid();
dataset.UserSet.AddObject(user);
dataset.SaveChanges();

{"Невозможно вставить значение NULL в столбец "Id" таблицы "BarSoc2.dbo.UserSet"; столбец не допускает пустых значений. Ошибка INSERT.\r\nВыполнение оператора было завершено."}

Таблица, в которую я вставляю, выглядит так:

-- Creating table 'UserSet'
CREATE TABLE [dbo].[UserSet] (
    [Id] uniqueidentifier  NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
    [Username] nvarchar(max)  NOT NULL,
    [Password] nvarchar(max)  NOT NULL
);
GO

-- Creating primary key on [Id] in table 'UserSet'
ALTER TABLE [dbo].[UserSet]
ADD CONSTRAINT [PK_UserSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

Я неправильно создаю объект или делаю что-то еще принципиально неправильное?


person richardwiden    schedule 15.05.2010    source источник
comment
Почему вы используете CreateObject() вместо нового UserSet()?   -  person Ian Mercer    schedule 15.05.2010
comment
Я предположил, что это более правильный путь, разве он не нужен?   -  person richardwiden    schedule 15.05.2010


Ответы (2)


Вам не нужно устанавливать свойство ID вручную. Он должен быть установлен автоматически при сохранении. Я предполагаю, что вы используете стандартный шаблон для Entity Framework, а не шаблон сущностей с самостоятельным отслеживанием или шаблон POCO. Если это так, то что-то вроде следующих строк кажется более подходящим:

User user = new User();
dataset.AddToUsers(user);
dataset.SaveChanges();
person Community    schedule 15.05.2010
comment
Спасибо, это сработало отлично. По-видимому, что-то идет не так, когда вы сами устанавливаете идентификатор. Однако AddToUsers устарел. - person richardwiden; 15.05.2010

В модели для полей, определенных как ключевые, добавьте следующий атрибут. Этот ключ, который не помечен как IDENTITY в базе данных, Entity Framework дает исключение

[Key]
[Display(Name = "Id")]     
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
public int Id { get; set; }
person varun sharma    schedule 11.01.2012