我需要在我的數據庫的2表中插入一行。這兩張表之間的關係是一對多關係。這是他們模式:自動生成id時如何使用entiity Framework core插入數據?
public partial class Task
{
public Task()
{
TaskOwner = new HashSet<TaskOwner>();
}
public int Id { get; set; }
public string Action { get; set; }
public int ActualEffort { get; set; }
public DateTime AssignationDate { get; set; }
public int EstEffort { get; set; }
public DateTime EstEnd { get; set; }
public bool IsComplete { get; set; }
public int ProjectId { get; set; }
public string Status { get; set; }
public virtual ICollection<TaskOwner> TaskOwner { get; set; }
public virtual Project Project { get; set; }
}
public partial class TaskOwner
{
public int Id { get; set; }
public int EmployeId { get; set; }
public int TaskId { get; set; }
public virtual Employe Employe { get; set; }
public virtual Task Task { get; set; }
}
這是背景:
modelBuilder.Entity<Task>(entity =>
{
entity.HasIndex(e => e.ProjectId)
.HasName("FKTask25514");
entity.Property(e => e.Id)
.HasColumnName("id")
.HasColumnType("int(10)");
entity.Property(e => e.Action)
.IsRequired()
.HasColumnName("action")
.HasColumnType("varchar(255)");
entity.Property(e => e.ActualEffort)
.HasColumnName("actual_effort")
.HasColumnType("int(10)");
entity.Property(e => e.AssignationDate).HasColumnName("assignation_date");
entity.Property(e => e.EstEffort)
.HasColumnName("est_effort")
.HasColumnType("int(10)");
entity.Property(e => e.EstEnd).HasColumnName("est_end");
entity.Property(e => e.IsComplete).HasColumnType("tinyint(1)");
entity.Property(e => e.ProjectId)
.HasColumnName("project_id")
.HasColumnType("int(10)");
entity.Property(e => e.Status)
.IsRequired()
.HasColumnName("status")
.HasColumnType("varchar(255)");
entity.HasOne(d => d.Project)
.WithMany(p => p.Task)
.HasForeignKey(d => d.ProjectId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FKTask25514");
});
modelBuilder.Entity<TaskOwner>(entity =>
{
entity.ToTable("Task_Owner");
entity.HasIndex(e => e.EmployeId)
.HasName("FKTask_Owner320287");
entity.HasIndex(e => e.TaskId)
.HasName("FKTask_Owner395416");
entity.Property(e => e.Id)
.HasColumnName("id")
.HasColumnType("int(10)");
entity.Property(e => e.EmployeId)
.HasColumnName("employe_id")
.HasColumnType("int(10)");
entity.Property(e => e.TaskId)
.HasColumnName("task_id")
.HasColumnType("int(10)");
entity.HasOne(d => d.Employe)
.WithMany(p => p.TaskOwner)
.HasForeignKey(d => d.EmployeId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FKTask_Owner320287");
entity.HasOne(d => d.Task)
.WithMany(p => p.TaskOwner)
.HasForeignKey(d => d.TaskId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FKTask_Owner395416");
});
一個任務可以由多個TaskOwner擁有。我想這個計算策略:
Models.Task task = new Models.Task()
{
Status = tde.Status.ToString(),
Action = tde.Subject.ToString(),
IsComplete = tde.IsComplete,
EstEnd = tde.DueDate.GetValueOrDefault(DateTime.Now),
AssignationDate = tde.DateTimeCreated.Date,
ActualEffort = Convert.ToInt32(tde.ActualWork),
EstEffort = Convert.ToInt32(tde.TotalWork),
ProjectId = (from p in _context.Project
where p.ProjectSapId == Convert.ToInt32(tde.BillingInformation)
select p.Id).First(),
};
Models.TaskOwner taskOwner = new Models.TaskOwner()
{
EmployeId = employee.Id,
};
task.TaskOwner.Add(taskOwner);
_context.Task.Add(task);
然後將其保存到數據庫中,但我總是revieve此錯誤:
self referencing loop detected with type 'Models.TaskOwner' . Path '[6].taskOwner[0].employe.taskOwner'.
如果我可以,我只想用我剛剛任務的ID創建並鏈接到taskOwner模型,但由於ID是自動生成的我不能或至少我不知道如何。我究竟做錯了什麼?什麼是我正在努力完成的正確方法?
非常感謝!隨着你的回答,我意識到我在BD的結構中犯了一個錯誤。它現在工作完美! –