我正在使用 BreezeJS 和 DurandalJS 框架开发一个水疗 Web 应用程序。我遇到了一个无法解决的问题。
我有一个名为:汽车的实体,该实体包含名称、编号、所有者、类型和制造商。在此实体中,名称和编号在实体创建并保存在数据库中时填写。其他属性允许为 NULL。
这是因为其他值是在模式/对话框屏幕期间填充的。在这里,用户可以从列表中选择所有者,也可以从列表中选择类型和制造商。当用户从下拉列表中选择一项时,所选值应分配给 Car 实体的值。我怎样才能让它发挥作用?
Car().Owner = newOwner;
Car.Owner() = newOwner;
这行不通。我尝试了很多组合。请记住,该值首先为 null,并且我无法插入新值;S
编辑 1
这里是Car的 Entity Framework 模型
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(这是具有相同问题的其他项目)
我将鼠标悬停在 newValue 上。
编辑2
根据 Julián Yuste 的回答,我也尝试过这个,但没有成功。这是错误:
当我这样做时Container().Owner(newValue);
编辑3
获取所有者的代码
breeze.EntityQuery.from("Customers")
.using(dataservice.manager)
.execute().then(function (data) {
data.results.forEach(function (item) {
tempCustomerList.push(item); //ko.observableArray([]);
});
}).fail(function (data) {
});
最佳答案
您是否使用 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
中搜索错误消息(实体无法附加到另一个 EntityManager 中的实体。必须首先分离两个实体之一。
) ,您将找到导致异常的代码行。从那里回溯可能会有所帮助。
编辑
问题的答案是确保 EntityManager
对象是 Singleton(在本例中为 dataservices.manager
对象)。
换句话说,使用与查询对象相同的EntityManager
对象来更新对象。
关于javascript - 在 Breeze 实体中分配新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714204/