![](/img/trans.png)
[英]Entity Framework: How to query a number of related tables in a database making a single trip
[英]How to make entity framework insert entries in one trip to database
我有一个使用EntityFramework代码优先定义的一对多关系 。 类似于:BigEntity,其中包含SmallEntitiesList(SmallEntity的列表o)。
每当我更新该对象的SmallEntities列表并执行dbContext.SaveChanges()
,我都可以在SQL记录器中看到Entity Framework 通过对每个对象进行一次数据库往返来插入这些项目 。
因此,日志看起来像这样:
这些插入中的每一个如下所示:
DECLARE
updatedRowid ROWID;
BEGIN
INSERT INTO SOME_TABLE(...)
VALUES (...)
RETURNING ROWID INTO updatedRowid;
OPEN '' /* @outParameter */ FOR SELECT
SOME_TABLE
FROM SOME_TABLE
WHERE ROWID = updatedRowid;
END;
有没有一种方法可以使实体框架表现出不同的行为,并使这些插入物每个都进入数据库?
更新:已经尝试过BulkInsert(不支持Oracle DevArt,这是我正在使用的功能)。
如果您使用的是EF(版本6)6.1.3,则可以通过提供的EntityFramework.BulkInsert扩展来实现。 它将在单个调用中插入对象列表,这将大大提高应用程序性能。 形成更多信息,请查看。
foreach(var item in ListItems)
{
context.Entry(item).State = System.Data.EntityState.Added;
context.Add(item);
}
context.SaveChanges();
要么
foreach (var item in objectList)
{
context.YourObject.AddObject(item );
}
context.SaveChanges(SaveOptions.None);
要么
研究-BulkInsert();
免责声明 :我是Entity Framework Extensions的所有者
该库支持所有主要提供商,包括:
该库使您可以执行方案所需的所有批量操作:
例
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);
// Perform Bulk Operations
context.BulkDelete(customers);
context.BulkInsert(customers);
context.BulkUpdate(customers);
// Customize Primary Key
context.BulkMerge(customers, operation => {
operation.ColumnPrimaryKeyExpression =
customer => customer.Code;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.