gpt4 book ai didi

c# - 如何防止在使用 Entity Framework 更新单个列时将其他列值更改为表?

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:38 25 4
gpt4 key购买 nike

这里我有一个 ASP.NET MVC 中的方法。我正在做的是更新单列检查表的每一列都不为空。如果为 null,则 IsModified 属性更改为 false。我必须为每一列写声明。

我的示例方法 -

public int ServicesEdit(helplineservice _helplineservice)
{
int result = 0;
try
{
db.Entry(_helplineservice).State = EntityState.Modified;
if (string.IsNullOrEmpty(_helplineservice.description))
{
db.Entry(_helplineservice).Property(p => p.description).IsModified = false;
}
else
{
db.Entry(_helplineservice).Property(p => p.description).IsModified = true;
}
if (string.IsNullOrEmpty(_helplineservice.title))
{
db.Entry(_helplineservice).Property(p => p.title).IsModified = false;
}
else
{
db.Entry(_helplineservice).Property(p => p.title).IsModified = true;
}
if (string.IsNullOrEmpty(_helplineservice.contactnumber))
{
db.Entry(_helplineservice).Property(p => p.contactnumber).IsModified = false;
}
else
{
db.Entry(_helplineservice).Property(p => p.contactnumber).IsModified = true;
}
//if (string.IsNullOrEmpty(_helplineservice.active.ToString()))
//{
// db.Entry(_helplineservice).Property(p => p.active).IsModified = false;
//}
//else
//{
// db.Entry(_helplineservice).Property(p => p.active).IsModified = true;
//}
db.SaveChanges();
result = 1;
}
catch (Exception ex)
{
result = 0;
}
return result;
}

调用上面的方法-

helplineservice _helplineservice = new helplineservice();
_helplineservice.helplineid =sectionid;
_helplineservice.allowedtoapp = allow;
result = _ftwCommonMethods.ServicesEdit(_helplineservice);

我认为这段代码看起来不合逻辑。告诉我更好的方法来做到这一点。 如何在不编写这么多代码的情况下更新表的单列?提前致谢。

最佳答案

您可以通过先加载要更新的实体来避免所有检查。

var context = new DbContext();

// Load entity via whatever Id parameter you have.
var entityToUpdate = context.Set<Type>().FirstOrDefault(x => x.Id == idToUpdate);

if(entityToUpdate != null)
{
entityToUpdate.Value1 = newValue1;
entityToUpdate.Value2 = newValue2;

context.SaveChanges();
}

只有 Value1 和 Value2 会被更新。所有其他现有值将保持不变。

在您的情况下,您正在做的是创建一个新的空实体,然后将其 Key 设置为数据库中已存在的内容。当您将该实体附加到上下文时,EF 别无选择,只能假定该实体中的所有值都是新的更新值。这是 EF 的标准行为。

关于c# - 如何防止在使用 Entity Framework 更新单个列时将其他列值更改为表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33370312/

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