gpt4 book ai didi

c# - 尽管使用 SaveChanges(),但无法更改 EF 中的值

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:44 29 4
gpt4 key购买 nike

我在 Entity Framework 6 中更新值时遇到问题,我在互联网上彻底寻找答案,但似乎我做的一切都很好,但我似乎无法让它工作。

值得一提的是,将实体添加到数据库中效果很好,这意味着我可以将项目中的产品/用户添加到数据库中,但不能更新它们。这是作业。

 public bool ChangeAccountStatus(long userID, bool isUserActive)
{
User userToChange = GetUserById(userID); // Gets the user whose values I want to change.
using (var context = new ShopContext())
{
if (userToChange != null)
{
if (isUserActive)
{
userToChange.IsActive = false;
context.SaveChanges();

}

else
{
userToChange.IsActive = true;
context.SaveChanges();
}
return true;
}
return false;
}
}

如果我使用 linq 找到我想要更改其值的用户,我可以使更新工作,但我不想在我的项目中有太多代码重复,并且我使用相同的 linq(函数 GetUserById ) 在许多其他功能中。我是否需要使用 linq 从数据库访问用户,而不是使用我创建的函数来避免代码重复?这是 GetUserById 函数:

        public User GetUserById(long userId) 
{
using (var context = new ShopContext())
{
var userToFind = context.UsersTable
.Where((u) => u.Id == userId).FirstOrDefault();

if (userToFind != null)
return userToFind;
else
return null;
}
}

最佳答案

您正在从一个上下文中检索实体,然后在另一个上下文中调用 SaveChanges()。如果你内联这个方法,它会变得更清晰:

var userToChange;
using (var context = new ShopContext())
{
userToChange = context.UsersTable.Where((u) => u.Id == userId).FirstOrDefault();
}

using (var context = new ShopContext())
{
if (userToChange != null)
{
if (isUserActive)
{
userToChange.IsActive = false;
context.SaveChanges();
}
else
{
userToChange.IsActive = true;
context.SaveChanges();
}
return true;
}
return false;
}

第二个上下文不知道任何关于 userToChange 的信息,因为它没有跟踪它。你可以告诉它:

context.UsersTable.Attach(userToChange);

顺便说一句,那里有一些冗余代码 - 可以简化将 bool 值分配给 true 或 false 的 if 语句:

if (isUserActive)
userToChange.IsActive = false;
else
userToChange.IsActive = true;

// Equivalent to:
userToChange.IsActive = !isUserActive;

并且空检查不是必需的:

if (userToFind != null)
return userToFind;
else
return null;

// Equivalent to:
return userToFind;

关于c# - 尽管使用 SaveChanges(),但无法更改 EF 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751496/

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