gpt4 book ai didi

c# - 带有 UoW 更新的 EF 存储库

转载 作者:行者123 更新时间:2023-11-30 20:19:10 25 4
gpt4 key购买 nike

我相信有人在其他地方问过这个问题,但我找不到直接的解决方案。我的 Api 正在传递对象模型,在服务器端,未传递的该对象的每个值都被视为 null(有意义)。有什么方法可以告诉 EF6 不要以不必编写每个属性并检查它是否为 null 的方式使用传递的对象中的 null 值更新实体。

伪代码

API

Update(int id, TaskEntity obj)
{
unitOfWork.Tasks.Update(id, userTask);
...
unitOfWork.Save()
}

repo 更新

Update(int id, T entity)
{
var existingRecord = Get(id); //Gets entity from db based on passed id
if (existingRecord != null)
{
var attachedEntry = Context.Entry(existingRecord);
attachedEntry.CurrentValues.SetValues(entity);
}
}

我的问题是,任何具有空值的数据实际上都会用空值重写现有的数据库记录值。

请指出解决此问题的解决方案或文章。我应该进行反射(reflection),也许 automapper 可以处理这个(我相信这不是它的目的),或者应该编写某种辅助方法,因为我的对象可以包含子对象。

提前谢谢你。

最佳答案

你可以这样做

Update(int id, T entity,string[] excludedFields)
{
var existingRecord = Get(id); //Gets entity from db based on passed id
if (existingRecord != null)
{
var attachedEntry = Context.Entry(existingRecord);
attachedEntry.CurrentValues.SetValues(entity);
for(var field in excludedFields)
{
attachedEntry.Property(field).IsModified = false;
}
}
}

有些场景需要您更新对象的一部分,有时需要更新其他部分,我认为最好的方法是传递要从更新中排除的字段

希望对你有帮助

关于c# - 带有 UoW 更新的 EF 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206098/

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