2017-05-26 87 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

相关问题