Javascript 在实体中指定新值
我正在用BreezeJS和DurandalJS框架开发spa web应用程序。我遇到了一个我无法解决的问题 下面是: 我有一个实体名为:Car,这个实体包含名称、编号、所有者、类型en和制造商。 在该实体中,创建实体并将其保存在数据库中时,将填写名称和编号。其他属性的允许为NULL 这是因为其他值是在模式/对话框屏幕期间填写的。在这里,用户可以从列表中选择所有者,也可以从列表中选择类型和制造商。当用户从下拉列表中选择一个时,所选值应指定给汽车实体的值。但我没办法让它工作,有人知道怎么做吗Javascript 在实体中指定新值,javascript,breeze,Javascript,Breeze,我正在用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')代码>我相信这确实是问题所在,我需要使我的数据服务成为单例。或者你有更好的解决方案吗?如何通过一个文件使其全局化?我明天会把这个给你;)是的,就是这样;)我为我的数据服务创建了一个单例,它现在工作正常;)我是通过:[链接]完成的,当然我忘了感谢你:)非常感谢你指出这一点;)