首先是EF代码,将记录插入自动生成的表

时间:2017-01-26 08:15:41

标签: c# asp.net-mvc entity-framework

我在Models文件夹中创建两个类像这样:

Material.cs:

public class Material
{
    public int MaterialId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Project> Project { get; set; }
}

Project.cs:

 public class Project
{
    [Key]
    public int ProjectId { get; set; }
    [Required]
    public string Name { get; set; }
    public DateTime Date { get; set; }

    public ICollection<Material> Material { get; set; }

}

实体框架代码首先在我的SQL Server数据库中生成一个名为MaterialProjects的新表。我使用scaffolding生成ControllersViews

MaterialProjects有两个这样的列:

  1. Material_MaterialId
  2. Project_ProjectId
  3. 在第一步中,我将新项目记录添加到Projects表中。 在第二步中,我将新的材料记录添加到Materials表中。

    我的问题是:如何将记录添加到MaterialProjects表。我无法在我的代码中访问此实体。

    更新: 我是否在材质控制器中创建了Action方法?

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Create([Bind(Include = "MaterialId,Name,")] Material material)
        {
            if (ModelState.IsValid)
            {
                db.Materials.Add(material);
                //what to do here
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }
    
            return View(material);
        }
    

2 个答案:

答案 0 :(得分:1)

你不必添加该表,它将由EF automaticaly完成。你需要做的唯一事情是正确添加你的实体,并且你将不需要通过EF填充联结表。

Del invoker = new Del(Display);

答案 1 :(得分:1)

EF会自动处理多个多数联结表。在您的情况下,假设您要插入一个包含两个新Project实体的新Material。您可以通过将材料集合分配给新Material实体的Project集合来执行此操作。 EF将插入一个新项目和两个新材料,并将自动填充联结表

OP更新问题后更新 希望您已经插入了Project实体(例如,该项目的ID为100)。因此,在添加新的Material实体时:

var proj = context.Projects.Find (100);
newMaterialObject.Projects.Add (proj);
context.SaveChanges();