我正在與擁有一對多關係的兩個公司和訪問者合作。MVC EF:通過ID添加一個到多個組件
public class Company
{
public int CompanyID { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Visitor> Visitors { get; set; }
}
public class Visitor
{
public int VisitorID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int CompanyID { get; set; }
public bool SendNewsletter { get; set; }
public virtual Company Company { get; set; }
}
我有一個頁面,訪問者可以填寫有關他們自己的信息。這個想法是,如果公司不在數據庫中,它將被添加到列表中。如果公司名稱訪客進入與數據庫中的名稱匹配,則公司與訪客相關聯,完成其所需的信息,然後將其添加到其自己的數據庫中。
var companyExists = db.Companies.Any(c => c.CompanyName == visitor.Company.CompanyName);
if(companyExists)
{
var existingCompany = db.Companies.SingleOrDefault(c => c.CompanyName == visitor.Company.CompanyName);
visitor.CompanyID = existingCompany.CompanyID;
visitor.Company = existingCompany;
}
db.Visitors.Add(visitor);
db.SaveChanges();
此代碼有效,但似乎是多餘的。我將訪客的公司ID與現有公司聯繫起來,然後爲公司做同樣的事情。我讀過的每件事都表明,更新Visitor的CompanyID應該足夠了,但如果我沒有將existingCompany映射到Visitor的公司參數,則會創建第二個CompanyID。我覺得我錯過了一些關鍵點,希望有人能夠指引我走向正確的方向。
謝謝你的回覆阿里。我嘗試了你的建議,但程序仍然爲Visitor.Company.CompanyID創建了一個與Visitor.CompanyID不匹配的新ID。有沒有更簡單的方法來連接兩者?我認爲這是懶加載,所以我啓用它,並沒有改變。 –
@Yusif_Nurizade您是否在代碼塊中添加「visitor」和「Company」? –
阿里蘇丹尼你能說清楚你的意思嗎?什麼代碼塊?我有頂部的現有代碼。如果公司存在,我不會添加它,只需根據您的建議將該ID關聯起來,但仍會創建具有不同ID的新公司。 –