我在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生成Controllers
和Views
。
MaterialProjects
有两个这样的列:
Material_MaterialId
Project_ProjectId
在第一步中,我将新项目记录添加到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);
}
答案 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();