asp.net-mvc – 为什么实体框架在更新父项时会插入子项?
我在针对.Net 4.5的
Windows服务中使用此代码,该服务使用数据库优先的Entity Framework层:
var existingState = DataProcessor.GetProcessState(workerId); existingState.ProcessStatusTypeId = (int)status; existingState.PercentProgress = percentProgress; existingState.ProgressLog = log; DataProcessor.UpdateProcessState(existingState); 并且这个代码在同一个解决方案中的数据处理类中: public ProcessState GetProcessState(int id) { using (var context = new TaskManagerEntities()) { var processes = (from p in context.ProcessStates.Include("ProcessType").Include("ProcessStatusType") where p.IsActive && p.ProcessStateId == id select p); return processes.FirstOrDefault(); } } public ProcessState UpdateProcessState(ProcessState processState) { using (var context = new TaskManagerEntities()) { context.ProcessStates.Add(processState); context.Entry(processState).State = System.Data.EntityState.Modified; context.SaveChanges(); } return processState; } ProcessState是另外两个类(ProcessStatusType和ProcessType)的父级.当我在Windows服务中运行该代码时,它会检索记录,更新实体并保存它.尽管ProcessType子元素从未在上面的代码中使用,但是当执行ProcessState实体上的保存时,EF会在ProcessType表上执行插入操作并在其中创建新记录.然后,它会更改ProcessStatus实体中的FK,将其指向新子项并将其保存到数据库中. 它不会在ProcessStatusType表中执行此操作,该表使用基本相同的FK父子关系进行设置. 我现在有一个完全相同的ProcessType条目的数据库,我不需要,我不知道为什么会这样.我觉得我犯了一些我无法看到的明显错误,因为这是我的第一个EF项目.问题是我允许上下文在调用之间到期但保持相同的实体吗? 解决方法
使用Add将所有元素的状态设置为Added,这将导致插入子元素.在为此元素指定EntityState.Modified时未插入父元素.
尝试在UpdateProcessState中使用以下内容,而不是使用Add. context.ProcessStates.Attach(processState); context.Entry(processState).State = EntityState.Modified; context.SaveChanges(); Attach将所有元素的状态设置为Unchanged,并通过为父元素指定Modified来指示只应更新此元素. 另一个注意事项.您应该使用强类型包含(x => x.ProcessType)而不是Include(“ProcessType”). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – MVC3 Razor – 到期页面
- asp.net – Web.Config文件中的多行文本
- asp.net-mvc – 为时区敏感的应用程序存储DateTimeOffset
- ASP.NET自定义控件 – 什么是最好的方式来包括嵌入式CSS引用
- asp.net – 在int类型的Web服务参数上设置minOccurs =“0”
- .NetCore技术研究-一套代码同时支持.NET Framework和.NET C
- ASP.NET MVC4会话状态存储用户名
- ASP.NET Web API请求完成后如何处置资源?
- asp.net-mvc – ASP.NET MVC编辑集合最佳实践 – 您的意见
- asp.net-mvc – Html.Partial或Html.RenderPartial与MVC3?
- asp.net-mvc – 在EditorTemplate中渲染字段名称
- asp.net – 在自动生成的GridView列中防止HTML编
- .NET Core+MySql+Nginx 容器化部署
- asp.net-mvc – WebForms和MVC可以存在于一个项目
- asp.net – 如何访问listview中的按钮?特别是使
- asp.net – 推荐一个好的交互式语音应答系统来使
- stored-procedures – 使用经典的asp从oracle 11
- asp.net-mvc-3 – ASP.NET MVC3项目并不总是发布
- asp.net-mvc – 在ASP.Net MVC中的操作后替换par
- 如何在Asp.Net MVC 2中通过JQuery调用重载的C#函