我正在努力解决我的两个实体之间的关系。它应该是1对1的关系,其中文件可能包含也可能不包含OcrTask。
以下是实体(我删除了大部分不相关的属性)
public class RepositoryFile
{
public string FileName { get; set; }
public int RepositoryFileId { get; set; }
public int ProjectId { get; set; }
public virtual Project Project { get; set; }
public int? OcrTaskId { get; set; }
public virtual OcrTask OcrTask { get; set; }
}
这是依赖实体:
public class OcrTask
{
private OcrTask()
{
}
public OcrTask(int repositoryFileId)
{
this.RepositoryFileId = repositoryFileId;
}
[JsonProperty]
public int OcrTaskId { get; internal set; }
public int RepositoryFileId { get; set; }
public virtual RepositoryFile RepositoryFile { get; set; }
public int ProjectId { get; set; }
public virtual Project Project { get; set; }
}
并且,为了清楚起见,项目(可能包含零个或多个文件,因此包含零个或多个OcrTasks - 但每个任务和文件必须与项目相关联)
public class Project
{
internal Project()
{
}
public Project(string projectName)
{
this.ProjectName = projectName;
}
public string ProjectName { get; set; }
[JsonProperty]
public int ProjectId { get; internal set; }
public virtual ICollection<OcrTask> OcrTasks { get; set; } = new HashSet<OcrTask>();
public virtual ICollection<RepositoryFile> RepositoryFiles { get; set; } = new HashSet<RepositoryFile>();
}
现在,我遇到的问题是,当我尝试使用EntityFramework在OcrTasks表中插入一个条目时,我收到一个错误The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.OcrTasks_dbo.Projects_ProjectId\". The conflict occurred in database \"TheDatabase\", table \"dbo.Projects\"
当我去数据库尝试从SQL studio插入时,错误显示Cannot insert the value NULL into column 'OcrTaskId', table 'ConHubTestDb.dbo.OcrTasks'; column does not allow nulls. INSERT fails.
我运行的SQL是(文件ID为4,项目ID 5已存在于DB中)
insert into OcrTasks(CreatedDate, RepositoryFileId, ProjectId)
VALUES (GETUTCDATE(),4,5)
我不明白为什么标识列没有正常分配值 - 所有其他实体都这样做了?
此外,这是EF生成的列。当我检查OcrTaskId列的属性时,我看到Identity被设置为False。为什么呢?
另外,我有一个流畅的API片段。没有它,我得到一个错误,无法确定哪个是文件和任务实体之间关系的依赖端。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RepositoryFile>().HasOptional(f => f.OcrTask).WithRequired(t => t.RepositoryFile);
base.OnModelCreating(modelBuilder);
}
提前致谢!
答案 0 :(得分:0)
你的部分问题是OcrTaskId列的Indentity设置为false。 你应该将它设置为true,这样你就可以自动增量。然后你插入不好的工作。
关于FOREIGN KEY的错误,您可以将代码发布到实体插入的位置吗?