Breeze 管理器中的未引用实体

Breeze 管理器中的未引用实体,breeze,single-page-application,hottowel,Breeze,Single Page Application,Hottowel,我正在开发一个单页应用程序使用热毛巾模板,使用微风…我遇到了一个特殊的问题,我无法找出内部工作,导致它 我有一个programs表,programs表有一个响应外键,因此程序的结构是: Id, ResponseID, Name and Date 页面上有名字和日期,外文来自RouteData。 对于Programmes表中的一个响应,我只想在Programmes上节省 所以,当用户来到这个页面时,它会检查programs表,如果它有一个特定响应Id的条目,如果有,它将进入Edit case,如

我正在开发一个单页应用程序使用热毛巾模板,使用微风…我遇到了一个特殊的问题,我无法找出内部工作,导致它

我有一个programs表,programs表有一个响应外键,因此程序的结构是:

Id, ResponseID, Name and Date
页面上有名字和日期,外文来自RouteData。 对于Programmes表中的一个响应,我只想在Programmes上节省

所以,当用户来到这个页面时,它会检查programs表,如果它有一个特定响应Id的条目,如果有,它将进入Edit case,如果没有,它将添加一个新的条目case

为了实现这一目标,我正在做以下工作:

var objTempProgramme = ko.observable();   
var objProgramme = ko.observable();

function activate(routeData) {
       responseId = parseInt(routeData.responseId);

       // Create a Programme Entity
       objProgramme(datacontext.createProgramme());

       // Fill in a Temporary Observable with Programmes data
       datacontext.getEntitiesDetailsByRelativeId('responseID', responseId , 'Programmes', objTempProgramme, true).then(function(){
                // Check if Programmes Exists
                if (objTempProgramme() != null && objTempProgramme() != undefined) {
                // What I am doing here is filling my Programmes Entity with data coming from database (if it is there)                    
                objProgramme(objTempProgramme());
                } else {
                // The Else Part assigns the Foreign Key (ResponseId) to my Entity Created above
                objProgramme().responseID(responseId);
                }
       });
}
在datacontext.js中:

    var createProgramme = function () {
        return manager.createEntity(entityNames.programme);
    }

    var getEntitiesDetailsByRelativeId = function (relativeIdName, relativeId, lookupEntity, observable, forceRefresh) {
    var query = entityQuery.from(lookupEntity).where(relativeIdName, "==", relativeId);
        return executeGetQuery(query, observable, forceRefresh);
    };
现在,当我在我的页面上调用manager.saveChanes时,我希望OBJProgram被保存,不管是编辑还是保存, 但是breeze在这里所做的是,虽然它在objProgramme中填充ObjTempProgram,但它也让实体objProgramme与其管理器保持未引用状态,因此当我调用save时,它也会尝试保存该实体(总共两个实体,objProramme和一个未引用的实体),但那个实体并没有外键集,它失败了。但我的问题是为什么


将一个实体指定给另一个实体并不意味着将其所有属性指定给另一个实体?为什么会出现未引用的实体?

我很难理解这个问题。我的部分问题是,您在
datacontext
方法和
fillProgrammes
方法后面隐藏了一些基本信息。什么是
objProgramme
objtemprogramme
?它们是持有实体的viewmodel观察对象吗?什么是“relativeId”,它与
响应ID
有什么关系?我不想要大量的代码。但我确实需要知道您是如何创建实体和分配相关实体(或其ID)的。也许一个包含所有代码的简单示例可以帮助我理解。很抱歉,我已经删除了多余的代码..并添加了datacontext函数,但如果您觉得不够,让我解释一下…在页面激活时,创建了一个实体ObjProgram,然后我执行一个GET查询,根据ResponseId获取数据库中的任何记录,如果它存在,我只是将我的ObjProgram实体等同于有数据的临时可观察对象ObjTempProgram…但是在这个相等操作之后,当我尝试保存更改时,manager试图保存两个实体…我猜是我在激活时创建的一个…但该实体是否已填充有效数据?…为什么manager有两个实体?。。。我做错了什么吗?…我知道最好的方法是在检查OBJTEMP程序是否为空后创建实体…但我仍然对内部工作感到好奇…谢谢。