具有ComplexType的BulkInsert实体

时间:2016-10-04 10:28:16

标签: c# entity-framework entity-framework-6

如何及时插入具有ComplexType的许多实体?

请考虑以下事项:

public class Entity {
  public Address Address { get; set; }
}

[ComplexType]
public class Address {
  [ColumnName("Street")]
  public string Street { get; set; }
}

我尝试了忽略嵌套属性的SqlBulkTools.CustomColumnMapping(x => x.Address.Street, "Street").AddColumn(x => x.Address.Street)都没有崩溃,但实际上并没有做任何事情。

我也尝试了EntityFramework.BulkInsert-ef6,它被ComplexTypes和崩溃混淆了。

即使关闭了ValidateOnSaveEnabled和AutoDetectChangesEnabled,逐个执行插入也需要很长时间。创建新的上下文并使用DbContext.SaveChanges()的数量也无济于事。

2 个答案:

答案 0 :(得分:0)

您可以使用实体框架扩展库轻松完成此操作。

只是一个例子:

//update all Entities with Street of MyStreet to Street of YourStreet
context.Entities 
    .Where(t => t.Address.Street == "MyStreet")
    .Update(t => new Entity { t.Address.Street = "YourStreet" });

以下是链接:Entity Framework Extended Library

答案 1 :(得分:-2)

免责声明:我是该项目的所有者Entity Framework Extensions

此库允许批量插入(使用复杂类型),但也允许所有其他批量操作。

  • BulkSaveChanges
  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

实施例

// Bulk Insert
context.BulkInsert(complexTypeEntities);

// Easy to use
context.BulkSaveChanges();

// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);

该库支持所有类型的继承和关联,但是库不是免费的。