【发布时间】:2015-09-04 18:43:57
【问题描述】:
我正在为StoredProcedureReport 提交一个表单,其中包含许多StoredProcedureParameters。 Create 工作正常,但尝试更新让我问微软是否可以认真对待。
我来自 Rails 背景,@report.update_attributes(params[:report]) 将确切地知道如何处理它在其中找到的任何关联数据。据我所知,与此等效的 .NET 是 TryUpdateModel,看起来很有希望。首先。所以我尝试了一些这样的参数
IDGUID:d70008a5-a1a3-03d2-7baa-e39c5044ad41
StoredProcedureName:GetUsers
Name:search again UPDATED
StoredProcedureReportParameters[0].IDGUID:d70008a5-aba3-7560-a6ef-30a5524fac72
StoredProcedureReportParameters[0].StoredProcedureReportID:d70008a5-a1a3-03d2-7baa-e39c5044ad41
StoredProcedureReportParameters[0].Name:RowsPerPage
StoredProcedureReportParameters[0].Label:rows
StoredProcedureReportParameters[0].StoredProcedureReportParameterDataTypeID:a50008a5-2755-54c0-b052-865abf459f7f
StoredProcedureReportParameters[0].StoredProcedureReportParameterInputTypeID:a50008a5-2955-a593-d00f-00cd4543babf
StoredProcedureReportParameters[0].DefaultValue:10
StoredProcedureReportParameters[0].AllowMultiple:false
StoredProcedureReportParameters[0].Hidden:false
StoredProcedureReportParameters[1].IDGUID:d70008a5-a7a3-e35e-28b6-36dd9e448ee5
StoredProcedureReportParameters[1].StoredProcedureReportID:d70008a5-a1a3-03d2-7baa-e39c5044ad41
StoredProcedureReportParameters[1].Name:PageNumber
StoredProcedureReportParameters[1].Label:page was MODIFIEIIEIEIED!!!
StoredProcedureReportParameters[1].StoredProcedureReportParameterDataTypeID:a50008a5-2755-54c0-b052-865abf459f7f
StoredProcedureReportParameters[1].StoredProcedureReportParameterInputTypeID:a50008a5-2955-a593-d00f-00cd4543babf
StoredProcedureReportParameters[1].DefaultValue:1
StoredProcedureReportParameters[1].AllowMultiple:false
StoredProcedureReportParameters[1].Hidden:false
我假设在设置了所有主键和外键后,EF 会知道如何在我执行此操作时更新 StoredProcedureReportParameter 对象:
var report = context.StoredProcedureReports.FirstOrDefault(r => r.IDGUID == reportID);
if (report != null)
{
succeeded = TryUpdateModel(report);
context.SaveChanges();
}
现在,如果我在context.SaveChanges() 上放置一个断点,我的report 对象及其关联的StoredProcedureReportParameters 看起来就像我期望的那样。设置了外键和主键,所有值都被检查出来。但是SaveChanges 引发了这个错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
此消息中的一个建议是我应该为外键属性分配一个非空值,但正如我所说,StoredProcedureReportID 具有两个StoredProcedureReportParameter 的正确值对象。
我读过的其他帖子处理Update 操作循环关联并将它们附加到上下文。这真的是我一直在做的事情吗? EF真的那么密集吗?我希望 .NET 专业人士在这里向我展示光明。 必须有比这更简单的方法。
【问题讨论】:
-
你能显示准确的c#代码吗?
标签: asp.net-mvc entity-framework updates crud