Javascript 在实体中指定新值

Javascript 在实体中指定新值,javascript,breeze,Javascript,Breeze,我正在用BreezeJS和DurandalJS框架开发spa web应用程序。我遇到了一个我无法解决的问题 下面是: 我有一个实体名为:Car,这个实体包含名称、编号、所有者、类型en和制造商。 在该实体中,创建实体并将其保存在数据库中时,将填写名称和编号。其他属性的允许为NULL 这是因为其他值是在模式/对话框屏幕期间填写的。在这里,用户可以从列表中选择所有者,也可以从列表中选择类型和制造商。当用户从下拉列表中选择一个时,所选值应指定给汽车实体的值。但我没办法让它工作,有人知道怎么做吗

我正在用BreezeJS和DurandalJS框架开发spa web应用程序。我遇到了一个我无法解决的问题

下面是: 我有一个实体名为:Car,这个实体包含名称、编号、所有者、类型en和制造商。 在该实体中,创建实体并将其保存在数据库中时,将填写名称和编号。其他属性的允许为NULL

这是因为其他值是在模式/对话框屏幕期间填写的。在这里,用户可以从列表中选择所有者,也可以从列表中选择类型和制造商。当用户从下拉列表中选择一个时,所选值应指定给汽车实体的值。但我没办法让它工作,有人知道怎么做吗

    Car().Owner = newOwner;
Car.Owner() = newOwner;
这行不通。 我试了很多组合。请记住,该值首先为null,并且我无法插入新值;

编辑1:-----> 这里是Car的实体框架模型

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Estimate_App.Models
{
    public class tblCar
    {
        [Key]
        public int CarID { get; set; }
        public string CarNumber { get; set; }

        private DateTime _CreationDate;
        public DateTime CreationDate
        {
            get { return this._CreationDate; }
            set { this._CreationDate = DateTime.Now; }
        }

        //This is the Owner
        [ForeignKey("Owner")]
        public int? OwnerID { get; set; }
        public tblOwner Owner { get; set; }
    }
}

这里是我在CAR.().OWER()中放置的,考虑容器应该是CARE;(这是具有相同问题的另一个项目) 我将鼠标悬停在newValue上。 如果你需要更多的信息,让我知道

编辑2-2013年5月28日-->

根据朱利安·尤斯特的回答,我也试过了,但没有成功 这里是错误:当我执行
Container().Owner(newValue)时

编辑2013年5月3日至29日--> 获取所有者的代码

breeze.EntityQuery.from("Customers")
                         .using(dataservice.manager)
                         .execute().then(function (data) {
                             data.results.forEach(function (item) {
                                 tempCustomerList.push(item); //ko.observableArray([]);
                             });
                         }).fail(function (data) {

                         });

我想我们需要更多的信息。“所有者”属性是另一个实体的实例还是原始类型,即字符串、数字等


如果它是一个实体,那么我将首先检查“newOwner”变量是否也是一个实体

如果owner是可观察的,则需要将新值指定为:owner(newOwner)


您好。

您是否在使用
数据服务
对象中的EntityManager来创建
新所有者
对象

换句话说,您可能不应该这样做*:

var newOwner = new Owner();
newOwner.OwnerID = 123;
您应该这样做:

var newOwner = dataservice.manager.createEntity('Owner', { OwnerID: 123 });
*请注意,实际上可以使用
newowner()
,但这需要您在代码中定义实体构造函数。:-)

有关更多信息,请查看Breeze文档:

另外,请注意,您可以阅读Breeze JavaScript代码来帮助您理解这个问题。如果搜索错误消息(
一个实体不能附加到另一个EntityManager中的实体。必须先分离两个实体中的一个。
),您将找到导致异常的代码行。从那里回溯可能会有帮助

编辑

这个问题的答案是确保
EntityManager
对象是单例对象(在本例中是
dataservices.manager
对象)


换句话说,使用与查询对象相同的
EntityManager
对象来更新对象。

我用更多信息更新了我的问题,希望有帮助。有人吗?如果你们需要更多信息,请告诉我;)这也是我尝试的
Container().Owner(newValue)但它不起作用查看您的异常问题是实体不是来自同一个entitymanager。您始终可以尝试分配OwnerID而不是Owner:Container().OwnerID(newValue.OwnerID())。我明白了,但我需要立即显示新的Owners数据。但我不明白我怎么能有两个不同的实体管理器。我有1个dataservice对象,负责所有事情;我不明白,因为我不想创建一个新的所有者,我已经有了这个所有者!我只想把它绑在汽车上。因此,我有一个车主列表,从下拉列表中选择一个车主,然后将选定的车主放在属性car()中。owner()明白了。您的
dataservice
对象是否在此工作流期间创建新的
manager
对象?
dataservice
对象是一个全局变量吗?我明天回去工作时会检查这个,你可能是对的,因为在我做的每个javascript文件中:
var-dataservice=require('services/dataservice')//在我的模型中
dataservice=newdataservice('api/data')我相信这确实是问题所在,我需要使我的数据服务成为单例。或者你有更好的解决方案吗?如何通过一个文件使其全局化?我明天会把这个给你;)是的,就是这样;)我为我的数据服务创建了一个单例,它现在工作正常;)我是通过:[链接]完成的,当然我忘了感谢你:)非常感谢你指出这一点;)