具有实体框架核心的UPSERT

时间:2018-09-23 21:16:52

标签: entity-framework ef-core-2.1

需要使用EF Core在并行场景和竞速条件下更新或插入。 唯一可行的方法是使用try catch块。没有其他工作。 我知道我可以做一个SP,但是我只想要EF ...

这是工作代码,什么都没有坏,只是一团糟...

                        var _be = new Models.BackgroundEntry()
                        {
                            Id = id,
                            Datetime = Int64.Parse(first_action.Value<String>("datetime")),
                            Part = part,
                            Domain = host,
                            Session = Guid.Parse(req.session_id),
                            Action = action.ToString(),
                            Location = req.location
                        };

                        context.BackgroundEntry.Add(_be);

                        try
                        {
                            await context.SaveChangesAsync();
                        }
                        catch
                        {
                            context.BackgroundEntry.Remove(_be);

                            _be = await context.BackgroundEntry.FindAsync(id, sessionGuid);

                            if (_be.Part.Length < part.Length)
                            {
                                _be.Part = part;
                                context.Update(_be);
                                await context.SaveChangesAsync();
                            }
                        }

0 个答案:

没有答案