Entity Framework ObjectContext.SaveChanges() 和 class 方法

Entity Framework ObjectContext.SaveChanges() and class methods

我有更多的理论问题。如果有人能给我一个 link 的答案,我也会很高兴。我只是不知道如何在互联网上查找,所以我没有找到答案。

假设我有一个 class 应该检查数据库中是否没有损坏的数据。所以我用普通方法等

using (var databaseContext = new ExambleDBEntities())

此方法的目的是检查是否有损坏的数据 - 如果有,则进行修复。但这不是代码本身的问题,所以请原谅我没有给出任何代码。它是关于...我可以用数据库中的数据做什么。

所以我已经连接到数据库,设置了数据库上下文,完成了查询,我的第一次约会是在"TableName dataSample"。

主要问题是:

我可以将此 "dataSample" 发送到同一函数内的其他方法,在那里它会被更改,然后将更改保存在 main 方法中吗?

ObjectContext 是否跟踪从数据库中获取的内容并记住要保存的内容,或者它必须在相同的方法中,在 using 指令下?

我觉得我写的不够清楚所以也许我会写一些示例代码:

void MainMethod() 
{
  using (var databaseContext = new ExambleDBEntities()) 
  {
    var DatabaseQuery = from... select... ;
    TableName dataSample = DatabaseQuery.First();
    dataSample = CorrectMistakes(dataSample);
    databaseContext.SaveChanges();
  }
}

TableName CorrectMistakes(TableName sample) 
{
  if (somethingWrong)
    sample.money = 0;
  return sample;
}

我应该 return 更改对象还是可以在其他方法中编辑?

对于任何错误,我深表歉意,我真的很难用英语解释。

感谢您的帮助,以下是我在任何人需要时使用的东西:Visual Studio 2012,.NET Framework 4.5,MySQL Connector 6.9.4,MySQL for VS 1.2.3.

是的,你可以做到。抱歉,我没有 link 给你,但我只是 运行 进行了测试以确保它有效。测试它以确认它是否有效对您来说应该不会太困难。

因为您在 using 指令中调用 CorrectMistake(),它对 TableName 对象所做的任何更改都将保留在当前上下文中,并在您调用 [=15] 时保存=].

我能否将此 "dataSample" 发送到同一函数旁边的其他方法,在其中进行更改,然后在 main 方法中保存更改?

是的,你可以。试试吧!

ObjectContext 是否跟踪从数据库中获取的内容并记住要保存的内容,或者它必须在相同的方法中,在 using 指令下?

是也不是。它 "remembers" 当你在 using 指令中时。只要在 using 块中完成工作,哪种方法正在执行工作并不重要。

我应该 return 更改对象还是可以在其他方法中编辑?

没关系,两者都行。做最适合您情况的事情。如果您只是更改对象的其中一个属性,那么在方法内部进行编辑可能更有意义。

考虑这个简单的例子:

private void ChangeObject(object obj)
{
    if (something)
        obj.Name = "New name";
}

using (var db = new Context())
{
    var obj = db.Objects.First();
    ChangeObject(obj);
    db.SaveChanges();
}

这相当于:

using (var db = new Context())
{
    var obj = db.Objects.First();

    if (something)
        obj.Name = "New name";

    db.SaveChanges();
}