![](/img/trans.png)
[英]How do I setup a one-to-one-or-zero relationship with Entity Framework AND expose the foreign key on the child entity?
[英]How do I create a new entity in Breeze with a foreign key relationship?
我有一個使用Breeze,Web API和Entity Framework(代碼優先)的AngularJS SPA。 如何使用外鍵引用現有實體創建新的Breeze實體?
我嘗試構建這些示例,但是其中一些假定使用Knockout而不是AngularJS。
http://www.breezejs.com/documentation/add-new-entity
http://www.breezejs.com/documentation/creating-entities
我試圖以許多不同的方式添加新的ScheduleTask實體,但是它們都給出相同的錯誤:
遇到服務器端錯誤-有關更多詳細信息,請參見此對象上的entityErrors集合
用戶字段為必填項。
這是相關的代碼段(客戶端上的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);
});
太棒了。 我花了幾個小時試圖使它起作用,然后在我發布問題后就找到了答案。 我只需要擺脫ScheduleTask.User上的Required屬性,即可正常工作:
[需要]
public int UserId {get; 組; }
[ForeignKey(“ UserId”),必填]
公共用戶用戶{ 組; }
由於UserId仍然具有Required屬性,因此EF使其不可為空。
我最終在問題中使用嘗試#2,但是問題出在服務器端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.