Javascript Breezejs实体、敲除绑定、空导航属性

Javascript Breezejs实体、敲除绑定、空导航属性,javascript,asp.net-mvc,entity-framework,knockout.js,breeze,Javascript,Asp.net Mvc,Entity Framework,Knockout.js,Breeze,我知道我在做一些愚蠢的事情,但我希望有一些Breezejs经验的人能帮助我,因为我是新手。因此,问题是当我执行breeze manager.save时,会更改导航属性,并且只有导航属性不会发送到服务器。在我的模型中,所有导航属性都只是查找项(如果这有什么区别的话),我使用knockout进行绑定。下面是一个屏幕截图,显示了问题所在:- my dataservice中的相关位只执行以下操作:- function createAssessment() { ret

我知道我在做一些愚蠢的事情,但我希望有一些Breezejs经验的人能帮助我,因为我是新手。因此,问题是当我执行breeze manager.save时,会更改导航属性,并且只有导航属性不会发送到服务器。在我的模型中,所有导航属性都只是查找项(如果这有什么区别的话),我使用knockout进行绑定。下面是一个屏幕截图,显示了问题所在:-

my 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">
在将对象发送到服务器之前,请看一下我的对象。

现在完全被卡住了。。。
非常感谢您的关注。

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

另一方面,如果调用EntityManager.saveChanges并传入实体列表,则需要将要发送到服务器的任何相关实体包括在列表中


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

嗨@jay,谢谢你看这篇文章,结果是我犯了很多错误,但是读了你的文章确实帮助我重新评估了我想做的事情。谢谢你的帮助。p、 爱你在IdeaBrade.com上的工作