У меня есть проект, использующий 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.
Пара вопросов:
Почему конструктор не настолько умен, чтобы StoreGeneratedPattern установил Identity по умолчанию, когда он генерирует класс, при условии, что в базовой таблице для соответствующего столбца задан первичный ключ?В моем случае мне приходилось заходить в каждый класс в конструкторе и устанавливать это значение самостоятельно для каждого свойства первичного ключа (хотя, что интересно, EntityKey по умолчанию имеет значение true, как и ожидалось).
Это все еще не работает ... Почему?Вместо этого я попытался установить для StoreGeneratedPattern значение Computed, но безуспешно (ожидалось, в противном случае мне было бы интересно, почему установка его в значение Computed решает проблему).