Breezejs实体,knockout绑定,null导航属性

时间:2013-12-03 16:18:02

标签: javascript asp.net-mvc entity-framework knockout.js breeze

我知道我在这里做了一些蠢事,但我希望有一些Breezejs经验的人可以帮助我(请),因为我是新手。所以问题是当我做一个breeze manager.saveChanges()时,导航属性(只有导航属性)不会发送到服务器。在我的模型中,所有导航属性只是查找项目,如果这有任何区别,我使用knockout进行绑定。这是一个截图,显示错误: -

enter image description here

我的dataservice中的相关位就是这样: -

 function createAssessment() {               
   return manager.createEntity('VulnerabilityAssessment');       
}

域名模型: -

public class VulnerabilityAssessment
{      
    public int Id { get; set; }
    public virtual AssessmentStatus Status { get; set; }
    public virtual PupilRecord Pupil { get; set; }        
    public DateTime StartDate { get; set; }      
    public DateTime EndDate { get; set; }        
    public string LatestContact { get; set; }      
    public string Referrer { get; set; }      
    public virtual ReferralReason ReasonForReferral { get; set; }
    public string SingleResponsibleAdult { get; set; }
    public string CurrentIssues { get; set; }
    public virtual ReferralSupport PrimaryReferralSupport { get; set; }
    public virtual ReferralSupport SecondaryReferralSupport { get; set; }
    public bool LikelyToLeaveWithoutQualification { get; set; }
    public virtual Destination MovingOnDestination { get; set; }
    public virtual Destination DestinationAfterOneMonth { get; set; }
    public virtual Destination DestinationAfterSixMonths { get; set; }
    public virtual Destination DestinationAfterTwelveMonths { get; set; }
    public virtual ProtectedCharacteristic ProtectedCharacteristic { get; set; }
    public string Undisclosed { get; set; }


}

这是我的viewmodel: -

define(['services/logger', 'services/dataservice'], function (logger, dataservice) {

var title = 'Vulnerability Assessment';

this.activate = function activate() {
    var initialData = dataservice.getAssessmentLookups()
        .then(function (data) {
            vm.referralReasonCodes(data.referralReasonCodes);
            vm.referralSupportCodes(data.referralSupportCodes);
            vm.assessmentStatusCodes(data.assessmentStatusCodes);
            vm.destinations(data.destinations);
            vm.protectedCharacteristics(data.protectedCharacteristics);

            vm.assessment(dataservice.createAssessment());
            console.log('assessment: %A', vm.assessment());
        })
        .done();

    logger.log(title, null, title, true);

    return initialData;
}

this.save = function () {
    console.log('in save: %A', vm.assessment());
    dataservice.saveChanges();
}

var vm = {

    activate: this.activate,
    title: title,

    referralReasonCodes: ko.observableArray(),
    referralSupportCodes: ko.observableArray(),
    assessmentStatusCodes: ko.observableArray(),
    destinations: ko.observableArray(),
    protectedCharacteristics: ko.observableArray(),
    assessment: ko.observable(),
    save: this.save
};

return vm;

});

查看/ HTML: -

<select id="reason-for-referral" class="form-control input-md" data-bind="options: $root.referralReasonCodes, optionsText: 'description', value: $data.reasonForReferral"></select>

注意:上面的select元素位于另一个div中,如下所示: -

<div class="row" data-bind="with: assessment">

以下是我的对象在发送到服务器之前的看法。 enter image description here

此刻完全陷入困境...... 非常感谢你看一看。

1 个答案:

答案 0 :(得分:0)

Breeze不会在保存中发送“相关”实体(通过导航属性可用的实体),除非这些相关实体被“修改”,“添加”或“删除”。当您在没有任何参数的情况下调用EntityManager.saveChanges时,这是默认行为。这样做的原因是我们不希望发送任何实际没有改变的数据。

另一方面,如果您正在调用EntityManager.saveChanges并传入实体列表,那么您将需要包含要作为列表的一部分发送到服务器的任何相关实体。

如果没有,那么为什么要在“saveChanges”调用中将未更改的实体发送到服务器?我错过了什么吗?