实体框架ObjectContext.SaveChanges()和类方法

时间:2015-03-11 00:46:21

标签: c# mysql entity-framework visual-studio-2012

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

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

using (var databaseContext = new ExambleDBEntities())

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

所以我连接到数据库,设置数据库上下文,查询完成,我的第一个日期让我们说“TableName dataSample”。

主要问题是:

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

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

我认为我写的内容不够明确,所以也许我会写一些示例代码:

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;
}

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

对不起任何错误,我很难用英语解释。

感谢您提供任何帮助,以下是我使用的内容,以防万一有需要:Visual Studio 2012,.NET Framework 4.5,MySQL Connector 6.9.4,MySQL for VS 1.2.3。

1 个答案:

答案 0 :(得分:0)

是的,你可以这样做。对不起,我没有为您提供链接,但我只是进行了测试以确定它是否有效。您也不应该对此进行测试以确认其有效。

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

我可以发送这个" dataSample"其他方法是否具有相同的功能,它将被更改,然后保存主方法中的更改?

是的,你可以。试试吧!

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

是和否。它记得"当你在using指令。只要在using块中完成工作,对于哪种方法正在进行工作并不重要。

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

没关系,要么都行不通。做任何最适合你情况的事情。如果您只是对对象的某个属性进行了更改,那么在方法内部进行编辑可能更有意义。

考虑这个简单的例子:

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();
}