微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF Core两次提取相同的数据

如何解决EF Core两次提取相同的数据

我有一个向我的系统成员发送电子邮件功能。他们将收到哪种电子邮件取决于不同的条件。

最近我发现,它有时会两次发送给同一个人。

我的代码-简化:

In my startup.cs:

[...]

services.AddDbContext<DBContext>(options => options.UsesqlServer(Configuration.GetConnectionString("App")));

[...]


My page:

namespace MyApp.Pages
{

    public class MemberMailsModel : PageModel
    {

        private readonly DBContext _dbContext;
        private readonly IHttpClientFactory _httpClientFactory;

        public MemberMailsModel(DBContext dbContext,IHttpClientFactory httpClientFactory)
        {
            _dbContext = dbContext;
            _httpClientFactory = httpClientFactory;
        }

        public async Task<PageResult> OnGetAsync()
        {

            var httpClient = _httpClientFactory.CreateClient("SendInBlue");
            var members = await _dbContext.Members.Include(x => x.Logs).Where(x => x.ConsentDate == null).AsNoTracking().ToListAsync();

            foreach (var member in members)
            {

                bool mail1sent = member.Logs.Any(x => x.Action == "Mail1Sent");
                bool mail2sent = member.Logs.Any(x => x.Action == "Mail2Sent");
                bool mail3sent = member.Logs.Any(x => x.Action == "Mail3Sent");

                if (!mail1sent)
                {                
                    var sibMail = await httpClient.PostAsync(...);
                    sibMail.dispose();

                    var log = new Log
                    {
                        Date = DateTime.Now,Action = "Mail1Sent",Text = "Mail #1 sent",MemberId = member.Id
                    }
                    _dbContext.Add(log);
                }
                else if (!mail2sent && mail1sent)
                {                
                    var sibMail = await httpClient.PostAsync(...);
                    sibMail.dispose();

                    var log = new Log
                    {
                        Date = DateTime.Now,Action = "Mail2Sent",Text = "Mail #2 sent",MemberId = member.Id
                    }
                    _dbContext.Add(log);
                }
                else if (!mail3sent && mail2sent)
                {                
                    var sibMail = await httpClient.PostAsync(...);
                    sibMail.dispose();

                    var log = new Log
                    {
                        Date = DateTime.Now,Action = "Mail3Sent",Text = "Mail #3 sent",MemberId = member.Id
                    }
                    _dbContext.Add(log);
                }

                await _dbContext.SaveChangesAsync();

            }

            return Page();

        }

    }

}

我可以在自定义日志功能中看到,某些成员两次获得相同的电子邮件,并在完全相同的时间戳下两次被添加到日志中,就像该成员两次在查询中一样。

它可以在任意随机成员的任何条件下发生。

那怎么可能?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。