Breez创建复杂实体

时间:2014-12-30 14:00:18

标签: angularjs entity-framework ef-code-first breeze

我有像这样的实体

 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;未定义的

2 个答案:

答案 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 () {


            });

当我拿出来......它修复了