我正在使用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;)(这是另一个具有相同问题的项目) 我将鼠标悬停在newValue上。 如果您需要更多信息,请告诉我们!
编辑2 --- 2013年5月28日 - >
在JuliánYuste的回答中,我也尝试了这个,但它没有奏效
这里出现错误:当我执行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) {
});
答案 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
对象更新对象。