【发布时间】:2017-08-09 22:28:46
【问题描述】:
我需要在我的数据库的 2 个表中插入一行。这两张表之间的关系是一对多的。这是他们的模型:
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");
});
一个Task可以被多个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);
然后将其保存到数据库中,但我总是查看此错误:
检测到类型为 'Models.TaskOwner' 的自引用循环。路径'[6].taskOwner[0].employe.taskOwner'。
如果可以的话,我会使用我刚刚创建的任务的 id 并将其链接到 taskOwner 模型,但由于 id 是自动生成的,我不能或者至少我不知道如何生成。我究竟做错了什么?做我想要完成的事情的正确方法是什么?
【问题讨论】:
标签: mysql entity-framework linq entity-framework-core asp.net-core-webapi