Entity Framework 4.1 DatabaseGeneratedOption.Identity Performance - PullRequest
0 голосов
/ 10 июля 2011

В настоящее время я работаю над приложением, которое использует Entity Framework 4.1 (сначала код) и SQL Server CE 4.0.Одна из новых вещей, которые мне действительно нравятся в SQL Server CE 4.0, - это вычисленные значения.

Но у меня возникли некоторые проблемы с производительностью при импорте старых данных в мою новую систему хранилища данных (около 50000 записей).Это моя вторая реализация для этого.Первая версия использовала Entity Framework 4.0 и SQL Server CE 3.5.Но между этими реализациями существует огромная разница в производительности.Первая реализация кода занимает около одного часа для импорта записей, другая реализация - всего несколько минут.

Наибольшее время тратится на метод SaveChanges.Я отследил проблему до атрибута [DatabaseGenerated(DatabaseGeneratedOption.Identity)].Если я использую [DatabaseGenerated(DatabaseGeneratedOption.None)] и реализую собственное поколение ключей (в качестве простого обходного пути), производительность вернется на уровень первой реализации.

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

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

Я решил пойти по пути «сгенерировать свой ключ». Я добавил необходимые функции для генерации ключей в мой класс DBContext.

Если Microsoft что-то изменит в этом поведении, я вернусь к автогенерации.

0 голосов
/ 11 июля 2011

Держите ObjectContext / соединение открытым в течение всего времени жизни вашего приложения. EF не идеален для массовых вставок, используйте SqlCeResultSet для максимальной производительности.

...