AttachRange的工作时间很长

我有以下型号

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!感谢您的帮助!

loulizhi969 回答:AttachRange的工作时间很长

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3138767.html

大家都在问