请参阅下面我的ERD。公司和联系人都可以同时拥有ContactDetails并成为用户。因此,我没有明确定义与这些表的外键关系。我使用UserType(int)来确定它是公司还是联系人,然后将相关ID存储在EntityId字段中。
以下是我用于在数据库中插入新公司的代码段。
public ActionResult Create(ProjectUser user)
{
if (ModelState.IsValid)
{
if (user.UserType == (int)PC.Utils.Enums.UserType.Company)
{
Company company = user.GetCompany(); // Get Company UI values from View Model
ContactDetail detail = user.GetContactDetail(); // Get Contact UI values from View Model
detail.UserType = (int)UserType.Company; // bind contact Type to Company Type
detail.EntityId = company.Id;
User login = user.GetLoginDetails(); // Get User UI values from View Model
login.UserType = (int)UserType.Company; // bind User Login to Company
login.EntityId = company.Id;
login.Password = PC.Utils.Security.GetMD5Hash(login.Password); // encrypt the password
db.Companies.Add(company);
db.ContactDetails.Add(detail);
db.Users.Add(login);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(user);
}
但是,当我检查数据库时,Users和ContactDetails表中的EntityId为0,因为EF没有确定事务中的正确ID。有没有我缺少的东西,或者有更好的方法来实现这一目标?