首先,解决这个问题:
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