我有以下型号
public class PartnerPush
{
public int PartnerPushId { get; set; }
public Customer Customer { get; set; }
public int CustomerId { get; set; }
public string PackageId { get; set; }
public string Advertiser { get; set; }
public string FCMResponse { get; set; }
public bool Sent { get; set; }
public DateTime CreatedAt { get; set; }
public PartnerPush()
{
CreatedAt = DateTime.UtcNow;
}
}
经过一些操作后,我将通过以下方式保存结果(包含模型实现的列表):
await _applicationDbContext.PartnerPushes.AddRangeAsync(pushes);
看起来不错,但是EF
给了我一个错误,因为我已经拥有Customer
实体的主键。好吧,我知道如何解决。我必须将其标记为已附加。我正在使用这个:
_applicationDbContext.Customers.AttachRange(_applicationDbContext.Customers.Where(x => pushes.Select(y => y.CustomerId).Contains(x.CustomerId)));
请注意,我没有直接的Customer
实体,对于每个CustomerId
实现,我只有一个PartnerPush
整数。 Customer
字段为空。
因此有效。但是AttachRange
很慢。为了测试,我有以下代码:
var watch = System.Diagnostics.Stopwatch.StartNew();
_applicationDbContext.Customers.AttachRange(_applicationDbContext.Customers.Where(x => pushes.Select(y => y.CustomerId).Contains(x.CustomerId)));
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Console.WriteLine(elapsedMs);
它给了我7831
!感谢您的帮助!