我不是最流利的ASP.NET / EF,所以我有点难以找到完成我需要完成的工作的最佳方法。我尝试使用现有数据库创建CRUD。
而不是Employees表具有联系信息的特定列,他们设计它链接到Contact_Info表,Contact_Links是中间人。
我有3张桌子:
员工
列:EmployeeID(PK),FirstName,LastName
联系人链接的员工链接
Contact_Links Contact_Links通过Contact_Info_ID = ID Contact_Info Contact_Links中的类型列确定它是电子邮件地址,手机,传真等。因此它实际上不仅仅是PK / FK表。 也许最简单的方法是先让Action Method创建一个Employee,然后在一个选项的详细信息页面中添加一个Contact Info项?我不确定从哪里开始绘制它。 任何有关我尝试做什么的最佳方法的建议都会非常感激!
列:ID(PK),Contact_ID(FK),Contact_Info_ID(FK),类型
列:ID(PK),数据
答案 0 :(得分:0)
取决于您的要求。如果你尝试做多对多关系,那么最好不要在连接表中使用任何主键(或者在这种情况下使用实体)这样你就不必担心映射实体/表了。
答案 1 :(得分:0)
如果您要在同一表单上添加员工及其联系信息,则应使用“查看模型”。
您的视图模型将您在Employee和Contact中所需的属性合并到一个类中。然后,您将实现Employee创建/查看/编辑屏幕以期望您的EmployeeContactViewModel,您将可以访问所需的所有属性。
Controller上的Save / Edit方法将使用EmployeeContactViewModel作为类型。然后,您将能够将其安排到正确的结构中以持久保存到您的数据库中。
看看这个问题的答案:What is ViewModel in MVC?
快速谷歌使用View Models并且你将会飞行!
编辑: 感谢您进一步澄清您的问题。
将View Model传递给控制器后,您将不得不进行一系列插入操作。
以下是您的控制器方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EmployeeContactViewModel employeecontactviewmodel)
{
if (ModelState.IsValid)
{
var employee = new EmployeeModel {
FirstName = employeecontactviewmodel.FirstName,
LastName = employeecontactviewmodel.LastName
};
var contact = new ContactInfoModel {
Data = employeecontactviewmodel.ContactInfo
};
db.Employee.Add(employee);
db.Contact.Add(contact);
db.SaveChanges();
var contactLink = new ContactLinkModel {
ContactID = employee.ID,
ContactInfoID = contact.ID
};
db.ContactInfo.Add(contactLink);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(employeecontactviewmodel);
}