【问题标题】:Entity framework with lambda to insert records into linked tables带有 lambda 的实体框架将记录插入到链接表中
【发布时间】:2013-09-09 01:50:35
【问题描述】:

我的桌子是这样的:

我正在使用带有 CRUD 类文件的实体框架。首先我会让用户创建一个活动。

然后在 Activity 列表下,选择您要在哪个活动下创建任务的活动。

但是我如何使用 ActivityTask 表中的代码来绑定它们?我想要做的是,每当在选定的活动下创建某个任务时,该记录将在 ActivityTask 表中自动生成,其中 activityID 与 taskID 相关联。

现在我的代码就这么简单:

        //Insert record 
     public void Insert(ModelSQL.task act)
     {
         context.tasks.AddObject(act);
     }

我被困在如何继续这样做。我们是否必须使用 Include 或其他东西来包含链接表?

-编辑-

//Insert record 
 public void Insert(ModelSQL.task act)
 {
     context.AddToActivityTasks(act);
     context.tasks.Include("ActivityTask");
     context.ActivityTasks.AddObject(act);
   //  context.tasks.AddObject(act);
 }

我应该使用哪个 1?第一个和第三个选项给出了一个无效的争论错误。还是一个都没有?

【问题讨论】:

  • 出现了一个想法:在 ActivityTask 上出现在模型右下方的其他关联是什么?如果您将两个表与一个除了外键之外没有其他字段的中间表相关联,则 EF 应该足够智能以创建多对多映射(无论如何在 EF5 中)。
  • 还有其他的表是一对多的关系

标签: c# asp.net database entity-framework lambda


【解决方案1】:

假设您的 UI 允许用户从选择列表(下拉列表)中选择 ActivityTask,并且每个返回的值都是相关 ID,您可以像这样创建 ActivityTask

public void InsertActivityTask(int actid, int taskid)
    context.activitytasks.AddObject(new ActivityTask
    { 
        activityID = actid, 
        taskID = taskid 
    });
    context.SaveChanges();
}

【讨论】:

  • 在Activity下创建任务时,ActivityTask中没有自动生成记录?
  • @user2376998 - 据我回忆,这取决于您使用的 EF 版本以及模型的映射方式。如果您的Task 实体具有Activities 属性,那么您应该能够使用task.Activities.Add(activity),假设taskTask 实体并且activity 是您创建或查询的Activity 实体.
  • 但在这种情况下,它们并没有链接在一起,它们只是通过 ActivityTask 表链接。所以这不可能?
  • @user2376998 不像模型,不。您可能想要删除中间表,如果这就是它的全部用途。如果您的Task 表具有对Activity 的外键引用,EF 将在每个Activity 实体上创建一个Tasks 列表属性,并在每个Task 实体上创建一个Activity 属性。这是正确的关系吗(一个活动可以有很多任务,但一个任务只能有一个活动)?
  • 我忘了从任务表中删除活动ID,但是你是对的,活动可以有很多任务,但一个任务只能绑定到一个活动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多