Я представляю форму для StoredProcedureReport
, которая имеет много StoredProcedureParameters
. Создание работает отлично, но попытка обновления оставила меня вопросом, серьезно ли Microsoft серьезно относится к ней.Чистое обновление иерархии в Entity Framework
Я пришел из фона Rails, где @report.update_attributes(params[:report])
точно знает, что делать с любыми данными ассоциации, которые он находит. Из того, что я могу сказать, эквивалент .NET это TryUpdateModel
, который выглядел многообещающим. Во-первых. Так что я попытался его с некоторым Params как этого
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
поднимает эту ошибку:
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Одно из предложений в этом сообщении является то, что я должен назначить внешний ключ свойству ненулевое значение, но, как я уже говорил, StoredProcedureReportID
имеет правильное значение на оба StoredProcedureReportParameter
объектов.
Другие сообщения, которые я прочитал, имеют дело с циклами Update
и связывают их с контекстом. Неужели это то, чем я занимаюсь? Действительно ли EF этот плотный? Я надеюсь на .NET pro, чтобы показать мне свет здесь. Там имеет, чтобы быть более простым способом.
Можете ли вы показать точный код C#? –