【问题标题】:Add record to DbContext by returning null with a query通过使用查询返回 null 将记录添加到 DbContext
【发布时间】:2019-02-07 20:58:58
【问题描述】:

我做了一项研究,到目前为止我没有发现任何东西。感谢您的帮助。

正如标题所说,我正在通过查询向我的 DbContext 添加一条记录,如果它返回一个空值,则我创建该记录。否则,我修改它。

我的问题是:这是一个好的做法还是我不应该这样做?代码是这样的:

var desiredEntity = MyDbContext.SingleOrDefault(x => x.Name == "Rob");

if (desiredEntity == null)
  { desiredEntity = new DbSetOfEntity()... //create if doesn't exists }
else
{ desiredEntity.ValueToModify == 3; }

MyDbContext.SaveChanges()

这与显式创建实体并使用 DbContext.Add() 方法添加它有什么区别?

编辑: 问了一个类似的问题here,但我不想使用 AddOrUpdate 方法或 Attach 并手动更改实体的状态。我只想知道我的方法是否没有问题,以及使用传统的 .Add(myEntity) 方法有什么区别。

【问题讨论】:

  • 不,我不需要 Attach 方法或 AddOrUpdate 方法。我编辑了这个问题,只是想了解一下我的方法:) 如果有人有一些关于此的文档链接,那就太好了。
  • 我不明白你为什么不想使用 AddOrUpdate。但你所做的不一定是坏习惯。

标签: c# .net entity-framework-5


【解决方案1】:

AddOrUpdate() 正在通过 EntityKey 检查记录是否存在。因此,如果您正在检查的 x.Name 不是 Key - 您的方法是正确的。

此外,由于您只有名称值作为输入参数(“Rob”),因此您必须从上下文中请求记录,并将其附加。因此,您可以根据需要进行更改,并且将自动跟踪更改。或者,如果它不存在,则创建它并调用Add()

考虑到上述情况,您的方法是可以的,并且会起作用,我认为它没有任何问题。

另一方面,您的代码应该尽可能简单和优雅。这对于您或您的队友支持您的代码很重要。这就是为什么使用像AddOrUpdate 这样的结构或其他内置的东西是好的做法。但不是法律。

附:我看的不是{ desiredEntity.ValueToModify == 3; } 之类的代码。这可能是不好的做法,因为 3 可能应该作为参数传递给您的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多