实体框架 - 包含大量项目的多对多映射

时间:2016-04-26 13:19:01

标签: c# sql-server entity-framework entity-framework-6 many-to-many

在我的应用程序中,我有两个表,有多对多的映射,Foo和Bar:

public class Foo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid FooId { get; set; }

    public virtual ICollection<Bar> Bars { get; set; }

}

public class Bar
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid BarId { get; set; }
    public virtual ICollection<Foo> Foos { get; set; }

}

有一次,我需要在foo记录中添加很多(大约10,000个)条形图。 条形码记录已存在于数据库中,我已将条形记录的ID存储在内存中 现在我正在寻找一种快速的方法来创建Foo记录和所有条形记录之间的映射。

到目前为止,我尝试根据存储在内存中的ID创建新的bar实体,并使用 DbContext.Entry 方法将其状态设置为Unchanged:

var barIds = new List<Guid>();  
var bars = barIds.Select( x => new Bar { BarId = x } );
bars.ForEach( x => barRepository.Entry( x ).State = EntityState.Unchanged );
var foo = new Foo
{
    Bars = bars
};
fooRepository.Add(foo);
fooRepository.SaveChanges();

这有效,但速度很慢(每个实体的呼叫条目需要花费很多时间) 使用EF有更高效的方法吗?

0 个答案:

没有答案