protected override void Seed(Fitlife.Domain.Concrete.EFDBContext context)
{
List<List<string>> foodweights = GetLines(basePath + "FoodWeights.txt");
int counter = 0;
foodweights.ForEach(line =>
{
FoodWeights newVal = new FoodWeights()
{
FoodCode = int.Parse(line[0]),
PortionCode = int.Parse(line[1]),
PortionWeight = decimal.Parse(line[2])
};
context.FoodWeights.Add(newVal);
if (++counter == 1000)
{
counter = 0;
context.SaveChanges();
}
});
}
Выше метод используется для заполнения моей базы данных. Но для 1000 записей требуется 50 секунд. У меня есть файл с записями 470k, как я могу повысить производительность. Я использую сущность framework, и этот метод вызывается, когда я делаю PM> update-database с менеджером пакетов. Мне нужна аналогичная функциональность, я очень новичок в asp.net и инфраструктуре сущности, любое руководство будет оценено по достоинству.Entity Framework Bulk Load Too Slow Add Seed
PS: Можно ли принимать 50 секунд за 1000 записей, или я делаю что-то неправильно.
К сожалению, EF плохо работает с пакетными/массовыми заданиями. Я бы просто использовал ['SqlBulkCopy'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx), который был разработан для массовых вставок. –
Можете ли вы предоставить мне какой-либо пример, я могу использовать sqlbulkcopy внутри моей функции семени, я хочу по-прежнему использовать команду диспетчера пакетов, например, PM> update-database –
Сколько записей содержится в файле FoodWeights.txt? Я вижу, что вы сохраняете каждые 1000 строк. Похоже, он все равно будет прокручивать весь ваш файл, что может занять довольно много времени, если FoodWeights.txt - большой файл. – jsmith