gpt4 book ai didi

c# - Entity Framework ObjectContext.SaveChanges() 和类方法

转载 作者:行者123 更新时间:2023-11-29 22:48:54 25 4
gpt4 key购买 nike

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

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

using (var databaseContext = new ExambleDBEntities())

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

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

主要问题是:

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

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

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

抱歉有任何错误,我很难用英语解释这一点。

感谢您的帮助,这里是我使用的东西,以防有人需要:Visual Studio 2012、.NET Framework 4.5、MySQL Connector 6.9.4、MySQL for VS 1.2.3。

最佳答案

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

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

我可以将此“dataSample”发送到同一函数内的其他方法,在其中对其进行更改,然后在主方法中保存更改吗?

是的,可以。尝试一下!

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

是和否。当您处于 using 指令中时,它会“记住”。只要工作是在 using block 中完成的,哪个方法正在执行工作并不重要。

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

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

考虑这个简单的例子:

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

关于c# - Entity Framework ObjectContext.SaveChanges() 和类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com