我有兩個EF模型/類有它們之間的關係:成員和MembershipSeason。一個會員可以有幾個MembershipSeasons。一個MembershipSeason模型有一個外鍵參考(MemberID)到成員模型在分貝。EF是否跟蹤相關模型,並在需要時設置其外鍵?
Member.cs
public class Member
{
public int MemberID { get; set; }
//some properties left out
public virtual ICollection<MembershipSeason> MembershipSeasons { get; set; }
}
MembershipSeason.cs
public class MembershipSeason
{
[Key]
public int MembershipSeasonID { get; set; }
//some properties left out
public int MemberID { get; set; }
public virtual Member Member { get; set; }
}
我嘗試以這兩個模型張貼到同一在同一時間一起創建方法。我發現EF跟蹤這兩個模型並將它們保存爲db作爲新模型。它還通過設置會員ID的新會員模型作爲外鍵到新的MembershipSeason模型分貝鏈接這兩個模型。我猜這是計劃的行爲? - 我的意思是,EF設置相關模型的外鍵自動似乎是預期的行爲 - 事情應該如何工作。所以我想我不需要先保存會員模型,得到它的MEMBERID,並用它來MembershipSeason並將其單獨保存在創建方法? (因爲EF爲你做的工作)
db.Members.Add(member);
db.MembershipSeasons.Add(membershipSeason);
await db.SaveChangesAsync();
以上,並在不需要MEMBERID屬性直接設置爲MembershipSeason模型的方式,下面創建方法可行,因爲EF呢它會自動。
MemberController.cs
public class MemberController : Controller
{
private MembersContext db = new MembersContext();
//some code left out
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "MemberNumber,FirstName,LastName")] Member member,
[Bind(Include = "HasPaidMembership,SeasonId")] MembershipSeason membershipSeason)
{
try
{
if (ModelState.IsValid)
{
db.Members.Add(member);
db.MembershipSeasons.Add(membershipSeason);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
}
catch (DataException /* dex */)
{
}
return View(member);
}
}
我與EF和ASP.NET MVC挺新的,所以我要把這些東西搞清楚。任何幫助表示讚賞 - 謝謝。
感謝您爲我們提供的最佳答案以及有關實體框架自我跟蹤實體的有用MSDN鏈接。現在我可以繼續使用EF了,而不用擔心在這個過程中可能會出現任何意外的行爲:-) – jyrkim