首先,解決這個問題:
public class Member
{
public int MemberID { get; set; }
public virtual Family Family { get; set; }
}
這應該是足夠的配置關係。 EF將按照慣例制定密鑰身份。
您可以分配關係的多種方式。你可以明確地設置FK ID如果將它們添加到您的模型,也可以使用導航性能是這樣的:
var family = new Family { LastName = "Smith", ...};
List<Member> members = new List<Member>
{
new Member(){ Name = "Ben", ... },
new Member(){ Name = "Amy", ... },
new Member(){ Name = "Brian", ... }
};
family.FamilyMembers = members;
context.Family.Add(family);
context.SaveChanges();
要自行車分配給所有者:
var owner = context.Members.Find(ownerId);
var bike = new Bicycle
{
Make = "ACME",
Model = "XXXX",
Owner = owner
};
context.Bicycles.Add(bike);
context.SaveChanges();
編輯:是的,將FK添加到您的模型當然是允許的。這是我使用的方法。這樣的代碼:
public class Member
{
public int MemberID { get; set; }
public int FamilyID { get; set; } // EF will automatically make this a FK by convention
public virtual Family Family { get; set; }
}
您需要添加註釋,如果你不遵守約定或者如果你想爲他們着想的文件:
public class Member
{
public int MemberID { get; set; }
public int FamilyID { get; set; }
[ForeignKey("FamilyID")]
public virtual Family Family { get; set; }
}
見http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx
我喜歡通順API。它可以讓我的模型更清晰並區分顧慮。對於簡單的項目,你可以添加所有的流暢代碼在你的背景下OnModelCreating()重寫,但我更喜歡來存儲我的上下文(每個實體一個文件)下的文件夾在我的實體的結構如下所述:http://odetocode.com/blogs/scott/archive/2011/11/28/composing-entity-framework-fluent-configurations.aspx
你其實可以有EF使用此處描述的技術自動找到你的流利代碼:https://msdn.microsoft.com/en-us/magazine/dn519921.aspx
關於孩子的集合,是的,你可以將新它在構造函數中:
public class Family
{
public Family()
{
FamilyMembers = new HashSet<Member>();
}
public int FamilyID { get; set; }
public virtual ICollection<Member> FamilyMembers { get; set; }
}
你的配置應該有你的主鍵設置作爲'DatabaseGeneratedOption.Identity'。然後,當您保存對象時,將自動設置ID,然後在設置這些對象時設置FK ID。 – krillgar
但是,我如何初始化這些FK?假設有2個家庭:史密斯和約翰遜。史密斯有3名成員:本,艾米,布萊恩。約翰遜有2名成員:約翰和娜塔莉。我如何初始化我的代碼中的所有內容? – Amai