簡體   English   中英

如何在Breeze中創建具有外鍵關系的新實體?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM