在Breeze实体中分配新值

时间:2013-05-23 12:40:25

标签: javascript breeze

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

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

这是因为在模态/对话框屏幕中填写了其他值。在这里,用户可以从列表中选择所有者,也可以从列表中选择类型和制造商。当用户从下拉列表中选择一个时,应将所选值分配给Car实体的值。但是,我无法让这个工作,有谁知道怎么做?

    Car().Owner = newOwner;
Car.Owner() = newOwner;

这不起作用。 我尝试了很多组合。请记住,该值首先为null,并且我无法插入新值; S

编辑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()。所有者(),考虑容器应该是Car;)(这是另一个具有相同问题的项目)http://s13.postimg.org/pfvfdkeqv/question_with_entitys.png 我将鼠标悬停在newValue上。 如果您需要更多信息,请告诉我们!

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

在JuliánYuste的回答中,我也尝试了这个,但它没有奏效 这里出现错误:Error message当我执行Container().Owner(newValue);

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

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

                         });

3 个答案:

答案 0 :(得分:0)

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

如果它是一个实体,那么我首先会检查你的'newOwner'变量实际上也是一个实体。

答案 1 :(得分:0)

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

问候。

答案 2 :(得分:0)

您是否正在使用dataservice对象中的EntityManager来创建newOwner对象?

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

var newOwner = new Owner();
newOwner.OwnerID = 123;

你应该这样做:

var newOwner = dataservice.manager.createEntity('Owner', { OwnerID: 123 });

*请注意,可以实际使用new Owner(),但这需要您在代码中定义实体构造函数。 : - )

有关详细信息,请查看Breeze文档:http://www.breezejs.com/documentation/creating-entities

另请注意,您可以阅读Breeze JavaScript代码以帮助您了解问题。如果您在breeze.debug.js搜索错误消息(An Entity cannot be attached to an entity in another EntityManager. One of the two entities must be detached first.),则会发现导致异常的代码行。从那里回溯可能会有所帮助。

修改

问题的答案是确保EntityManager对象是Singleton(在本例中为dataservices.manager对象)。

换句话说,当您使用查询对象时,使用相同的EntityManager对象更新对象。