繁体   English   中英

如何使用 EF 代码优先方法将单个记录添加到具有外键的表中

[英]how to add a single record in to table which has foreign key using EF code first approach

我有两张桌子

ToDo
   ToDoId [PK],
   Title,
   description,
   Category ,
   AssignedDate ,
   DueDate 
TaskReview 
    ReviewId, 
    Rating ,
    Comment, 
    ToDoId [FK]

-我必须使用外键 ToDoId 向任务审查表添加评级和评论 -基本上使用 TodiId 向特定任务添加评级和评论。

 public int AddRatingAndComment(int ToDoId, int rating,string comment)
        {
            
            using (var ctx = new Context())
            {
                //add rating and comment in task review table 

            }
           

        }

如果 ToDo 表有一个 TaskReview 项目列表( 一对多关系),那么您可以获取现有的 ToDo 并添加一个新的 TaskReview 项目。

ToDo todo = ctx.ToDos.SingleOrDefault(x => x.ToDoId == ToDoId);
if(todo != null)
{
    todo.TaskReviews.Add(new TaskReview(){...});
    dbContext.SaveChanges();
}

如果 ToDo 和 TaskReview 之间存在一对一的关系,您将在 TaskReview model 中声明一个类型为 ToDo 的变量。( 一对一关系)现在如果您想将 TaskReview 添加到现有的 Todo,您可以获取它并用它来添加一个新的 TaskReview:

ToDo todo = ctx.ToDos.SingleOrDefault(x => x.ToDoId == ToDoId);
if(todo != null)
{
    var addedTaskReview = new TaskReview(){
       ToDo = todo,
       ...
    };
    ctx.TaskReview.Add(addedTaskReview);
    dbContext.SaveChanges();
}

一对一实施

    public class ToDo
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ToDoId { get; set; }
        public string Title { get; set; }
        public string description { get; set; }
        public string Category { get; set; }
        public DateTime AssignedDate { get; set; }
        public DateTime? DueDate { get; set; }
        public virtual TaskReview TaskReview { get; set; }
    }
    
    public class TaskReview
    {
        [ForeignKey("ToDo")]
        public int TaskReviewId { get; set; }
        public int Rating { get; set; }
        public string Comment { get; set; }
        public virtual ToDo ToDo { get; set; }
    }
    
    using (var ctx = new SchoolContext())
    {
          var toDo = ctx.Todos.Where(o => o.ToDoId == todoId).FirstOrDefault();
    
          var taskReview = new TaskReview
          {
               ToDo = toDo,
               Comment = "accepted",
               Rating = 10
          };
           ctx.TaskReviews.Add(taskReview);
           ctx.SaveChanges();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM