我有像这样的实体
public class Person
{
public string FirstName { get; set; }
}
public class Employee
{
public string EmployeePhoto { get; set; }
public virtual Person Person { get; set; }
}
所以当我尝试在客户端breezjs上创建新实体时
manager.createEntity('Employee');
它没有用它创建人类实体,无法像这样绑定
<input type="text" data-ng-model="vm.employee.person.firstName" placeholder="First Name" />
但它显示以下错误
无法读取属性&#39; entityState&#39;未定义的
答案 0 :(得分:3)
你称之为复杂的实体,Breeze认为是两个相关的实体:员工和人。正如Wayne和Jeremy所说,你需要创造每一个。
但还有其他方面:Breeze使用foreign keys来管理实体之间的关系。您需要为每个实体提供标识符,以及与它们的外键关系。然后你的实体看起来像这样:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
}
public class Employee
{
public int EmployeeId { get; set; }
public string EmployeePhoto { get; set; }
public virtual Person Person { get; set; }
[ForeignKey("Person")]
public virtual int PersonId { get; set; } // relates Employee to Person
}
外键是必不可少的,因为Breeze可以识别发送到服务器和从服务器发送的实体之间的关系。
然后你可以这样做:
var employee = manager.createEntity('Employee');
var person = manager.createEntity('Person');
employee.person = person;
或者你可以这样做,告诉Breeze在初始化程序中分配属性:
var person = manager.createEntity('Person');
var employee = manager.createEntity('Employee', { person: person });
或者您可以在初始值设定项中按personId关联属性:
var person = manager.createEntity('Person');
var employee = manager.createEntity('Employee', { personId: person.personId });
答案 1 :(得分:0)
我发现了问题,我试图在featch元数据之后创建实体, 像这样
this.manager.fetchMetadata()
.then(function () {
});
当我拿出来......它修复了