У меня есть следующие модели определены в .NET:развязку отслеживание изменений расслоения плотных в дочерних сущностях
Public Class Request
<Key()>
Public Property RequestId As String
Public Property Description As String
Public Property InfoCards As List(Of InfoCard)
End Class
Public Class InfoCard
<Key()>
Public Property InfocardId As String
Public Property Description As String
Public Property RequestId As String
End Class
ReqeuestId собственности на InfoCard так, что EF Code First может генерировать дб. Затем я использую UpshotContext
помощника для создания модели JavaScript следующим образом:
Html.UpshotContext(bufferChanges:= true) _
.DataSource(Of UpshotTest.UpshotTest.RequestController)(Function(x) x.GetRequests()) _
.ClientMapping(Of UpshotTest.Models.Request)("Request") _
.ClientMapping(Of UpshotTest.Models.InfoCard)("InfoCard")
Это создает все модели хорошо, и когда я называю refresh
на развязку DataSource, данные извлекаются, как и ожидалось.
Проблема проблема Я столкнулся, когда пытаюсь изменить свойство дочернего объекта (e.q. Request.InfoCards(0).Description
). Изменение этого значения приведет к изменению в InfoCard
, но не в объекте Request
. Таким образом, вызов Request.IsUpdated()
возвратит ложных, в то время вызова Request.InfoCards(0).IsUpdated()
возвратят истинных.
Не удалось узнать, как отслеживать изменения дочерних объектов? Или это проблема с сопоставлениями на стороне клиента? До сих пор я пытался несколько отображений:
отображающего все свойства вручную:
window.Request = function (initialData) { var self = this; self.RequestId = ko.observable(initialData.RequestId); self.Description = ko.observable(initialData.Description); self.InfoCards = ko.observableArray(ko.utils.arrayMap(initialData.InfoCards, function (data) { return new window.InfoCard(data); })); upshot.addEntityProperties(self, "Request:#UpshotTest.Models"); };
с использованием
upshot.map
:window.Request = function (initialData) { var self = this; upshot.map(initialData, upshot.type(Request), self); };
задающей собственных карты функцию и прохождением ее к итогу:
window.Request = function (initialData) { var self = this; upshot.observability.configuration.map(initialData, upshot.type(Request), map, self); };
Отображение кажется правильным со всеми подходами, за исключение того, материнская компания не знает об изменениях, выполненных в своих детях. Возможно ли отслеживание детей?