在我的应用程序中,我有两个表,有多对多的映射,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有更高效的方法吗?