1

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

这里是:我有一个实体叫做:汽车,这个实体包含名称、号码、所有者、类型和制造商。在此实体中,名称和编号在实体创建并保存在数据库中时填写。其他属性允许为 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().Owner() 中的内容,考虑 Container 应该是 Car ;) (这是另一个有同样问题的项目)http://s13.postimg.org/pfvfdkeqv/question_with_entitys.png 我将鼠标悬停在 newValue 上。如果您需要更多信息,请告诉我!

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

根据 Julián Yuste 的回答,我也试过这个,但没有奏效这里的错误:错误信息当我这样做时Container().Owner(newValue);

编辑 3 ---2013 年 5 月 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) {

                         });
4

3 回答 3

0

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

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

于 2013-05-23T16:53:23.017 回答
0

如果 owner 是 observable,则需要将新值指定为:owner(newOwner)。

问候。

于 2013-05-28T10:54:00.907 回答
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对象是单例(在本例中为dataservices.manager对象)。

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

于 2013-05-29T01:29:25.333 回答