在 Entity Framework 中将对象列表添加到数据库上下文
Add object list to DB context in Entity Framework
这是一种方法,我们可以在数据库上下文中一个一个地添加项目以保存数据。
List<AuditTrails> auditLogs= new List<AuditTrails>();
foreach (AuditTrail a in auditLogs)
{
if (a.Operation == CreatedBy)
{
if (!string.IsNullOrEmpty(a.NewState))
context.AuditTrails.Add(a);
}
else
context.AuditTrails.Add(a);
}
context.SaveChanges();
没有Loop有什么办法吗?我正在与 Entity Framework 6 合作。
`
从技术上讲,不,但我认为您可以通过 List
的 ForEach
方法获得您要查找的内容的要点。
auditLogs.Where(a =>
(a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) ||
a.Operation != CreatedBy
).ToList().ForEach(a => context.AuditTrails.Add(a));
此外,您可以使用 AddRange
方法,但首先您必须按照@ChrisPratt 在他的回答中建议的那样过滤 collection:
var elementsToBeAdded=auditLogs.Where(a => (a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) ||
a.Operation != CreatedBy);
context.AuditTrails.AddRange(elementsToBeAdded);
如果 AutoDetectChangesEnabled
设置为 true
(这是默认值),那么 DetectChanges
将在添加任何实体之前调用一次,并且不会再次调用。这意味着在某些情况下 AddRange
可能比多次调用 Add
执行得更好。请注意,已经处于某些其他状态的上下文中的实体会将其状态设置为 Added
。 AddRange
是 no-op 对于已经处于 Added
状态
的上下文中的实体
这是一种方法,我们可以在数据库上下文中一个一个地添加项目以保存数据。
List<AuditTrails> auditLogs= new List<AuditTrails>();
foreach (AuditTrail a in auditLogs)
{
if (a.Operation == CreatedBy)
{
if (!string.IsNullOrEmpty(a.NewState))
context.AuditTrails.Add(a);
}
else
context.AuditTrails.Add(a);
}
context.SaveChanges();
没有Loop有什么办法吗?我正在与 Entity Framework 6 合作。 `
从技术上讲,不,但我认为您可以通过 List
的 ForEach
方法获得您要查找的内容的要点。
auditLogs.Where(a =>
(a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) ||
a.Operation != CreatedBy
).ToList().ForEach(a => context.AuditTrails.Add(a));
此外,您可以使用 AddRange
方法,但首先您必须按照@ChrisPratt 在他的回答中建议的那样过滤 collection:
var elementsToBeAdded=auditLogs.Where(a => (a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) ||
a.Operation != CreatedBy);
context.AuditTrails.AddRange(elementsToBeAdded);
如果 AutoDetectChangesEnabled
设置为 true
(这是默认值),那么 DetectChanges
将在添加任何实体之前调用一次,并且不会再次调用。这意味着在某些情况下 AddRange
可能比多次调用 Add
执行得更好。请注意,已经处于某些其他状态的上下文中的实体会将其状态设置为 Added
。 AddRange
是 no-op 对于已经处于 Added
状态