Entity Framework 4.0 вставка нового объекта ошибка - PullRequest
1 голос
/ 22 января 2011

У меня есть проект, использующий Entity Framework 4.0 в Visual Studio 2010. У меня есть следующий код:

using (var db = new MyEntities())
{
    var dbLead = db.Leads.CreateObject();
    dbLead.Email = lead.Email;
    db.Leads.AddObject(dbLead);
    db.SaveChanges();
}

, где MyEntities - обычный контекст объекта EF.Lead - это сгенерированный EF класс, который отображается на соответствующую таблицу в базе данных.В дополнение к свойству Email, назначенному в приведенном выше коде, класс Lead имеет свойство Id, которое я здесь явно не устанавливаю.Все ожидаемые вещи, пока ничего странного.

Я получаю исключение при вызове db.SaveChanges(), ссылаясь на "дублированный первичный ключ" в качестве проблемы.Однако в БД у меня есть соответствующий столбец, помеченный как первичный ключ, а в конструкторе .edmx соответствующее свойство помечено с помощью EntityKey как true и StoreGeneratedPattern как Identity.

Пара вопросов:

  1. Почему конструктор не настолько умен, чтобы StoreGeneratedPattern установил Identity по умолчанию, когда он генерирует класс, при условии, что в базовой таблице для соответствующего столбца задан первичный ключ?В моем случае мне приходилось заходить в каждый класс в конструкторе и устанавливать это значение самостоятельно для каждого свойства первичного ключа (хотя, что интересно, EntityKey по умолчанию имеет значение true, как и ожидалось).

  2. Это все еще не работает ... Почему?Вместо этого я попытался установить для StoreGeneratedPattern значение Computed, но безуспешно (ожидалось, в противном случае мне было бы интересно, почему установка его в значение Computed решает проблему).

1 Ответ

3 голосов
/ 22 января 2011

Попробуйте установить IsIdentity в Yes для столбца Id в базе данных. Я предполагаю, что здесь проблема, так как вы упоминаете, что EF не устанавливает StoreGeneratedPattern в Identity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...