我有一个AngularJS SPA使用Breeze,Web API和实体框架(代码优先)。如何使用对现有实体的外键引用创建新的Breeze实体?如何使用外键关系在Breeze中创建新实体?
我试图建立这些例子,但其中一些假设使用Knockout而不是AngularJS。
http://www.breezejs.com/documentation/add-new-entity
http://www.breezejs.com/documentation/creating-entities
我已尝试添加一个新的ScheduleTask实体许多不同的方式,但他们都给予了同样的错误:
Server side errors encountered - see the entityErrors collection on this object for more detail
The User field is required.
这里是代码中的相关片段(客户端上的TypeScript和服务器上的C#)。我知道我正在做一些顽皮的事情,比如盲目保存更改,但我希望尽可能简单。
微风配置:
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
控制器方法:
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return this.repository.SaveChanges(saveBundle);
}
父模型:
public class User
{
[Key]
public int UserId { get; set; }
public ICollection<ScheduleTask> ScheduleTasks { get; set; }
}
儿童模型:
public class ScheduleTask
{
[Key]
public int ScheduleTaskId { get; set; }
[Required]
public int UserId { get; set; }
[ForeignKey("UserId"), Required]
public User User { get; set; }
}
尝试1:
var entity: any = this.manager.createEntity('ScheduleTask');
entity.UserId = 1;
this.manager.saveChanges([entity])
.then(() => {
alert("Success!");
})
.fail((error) => {
alert(error.message + '\n' + error.entityErrors[0].errorMessage);
});
尝试2:
var entity: any = this.manager.createEntity('ScheduleTask', { UserId: 1 });
this.manager.saveChanges([entity])
.then(() => {
alert("Success!");
})
.fail((error) => {
alert(error.message + '\n' + error.entityErrors[0].errorMessage);
});
尝试3:
var query = breeze.EntityQuery.from("Users").top(1);
this.manager.executeQuery(query)
.then((users) => {
var user = users.results[0];
var entity: any = this.manager.createEntity('ScheduleTask');
user.ScheduleTasks.push(entity);
this.manager.saveChanges()
.then(() => {
alert("Success!");
})
.fail((error) => {
alert(error.message + '\n' + error.entityErrors[0].errorMessage);
});
})
.fail((error) => {
alert(error.message);
});
尝试4:
var query = breeze.EntityQuery.from("Users").top(1);
this.manager.executeQuery(query)
.then((users) => {
var user = users.results[0];
var entity: any = this.manager.createEntity('ScheduleTask', { User: user });
this.manager.saveChanges()
.then(() => {
alert("Success!");
})
.fail((error) => {
alert(error.message + '\n' + error.entityErrors[0].errorMessage);
});
})
.fail((error) => {
alert(error.message);
});
老兄!这种尝试是为了避免这种情况。 – hidden
@jvelez:我结束了尝试#2,但我想他们都会工作。问题出在服务器端代码,而不是客户端。我将这添加到我的答案中。 –