2017-05-26 68 views
0

在我的ASP.Net核心(1.1)Web API中,我有兩個模型:任務和特徵。最初我創建了一個或多個任務,然後我可以將它們中的幾個組合成一個功能。使用EntityFramework Core創建沒有父項目的子項核心

爲此,我寫了我的模型如下:

public class User_Task 
{ 
    [Key] 
    public long TaskId { get; set; } 
    public string What { get; set; } 

    [ForeignKey("FeatureId")] 
    public long FeatureId { get; set; } 

    public User_Task() 
    { 

    } 

} 

和特點:

public class Feature 
{ 
    [Key] 
    public long FeatureId { get; set; } 
    public string Analyst_comment { get; set; } 

    public virtual ICollection<User_Task> Tasks { get; set; } 

    public Feature() 
    { 

    } 
} 

現在的問題是:我不先創建一個功能能夠創建任務 - 我嘗試將featureId作爲0或null傳遞給任務的POST請求,但它失敗(對於null,我得到錯誤的請求,對於0它拋出異常)。

我應該在模型或控制器或回購課程中修改哪些內容來處理這種情況?

回答

3

你必須讓你的FeatureIdnullable

public class User_Task 
{ 
    [Key] 
    public long TaskId { get; set; } 
    public string What { get; set; } 

    [ForeignKey("FeatureId")] 
    public long? FeatureId { get; set; } 
} 

然後添加並運行遷移,EF Core應該能夠找出它是可選的一對多關係。

+0

謝謝!這工作,但它拋出了異常MySqlException:創建一個功能時,鍵'PRIMARY'的重複條目'3' – Nitish

+0

這意味着該功能(ID爲3)已經存在。當創建一個功能時,您必須**不**設置'FeatureId',即如果您執行了'新功能{Id = 3}'並添加它。相反,你首先需要加載它並修改加載的實體或者首先附加它,使用'dbcontext.Attach(feature)' – Tseng

+0

那麼在我的數據庫中目前還沒有功能,而且我的Swagger API建議我傳遞featureId = 0而功能創建,基本上適用於創建任務。數字3實際上是指taskId!所以基本上任務與taskId 3存在,它不讓我創建一個功能,該任務與該ID是3 – Nitish

相關問題