C# 通过实体框架5将复杂模型保存到数据库
给出以下代码,我试图将复杂对象保存到数据库中。如果我取出地址的引用,基本机构会正确保存,但添加地址后,我会得到外键错误,并且不会保存任何内容。保存复杂类的正确方法是什么C# 通过实体框架5将复杂模型保存到数据库,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,给出以下代码,我试图将复杂对象保存到数据库中。如果我取出地址的引用,基本机构会正确保存,但添加地址后,我会得到外键错误,并且不会保存任何内容。保存复杂类的正确方法是什么 Institution inst = new Institution(); inst.Name = "Institution Name"; Address address = new Address(); address.Street1 = "1234 west main"; addre
Institution inst = new Institution();
inst.Name = "Institution Name";
Address address = new Address();
address.Street1 = "1234 west main";
address.City = "Gotham";
address.State = "WI";
address.PostalCode = "55555";
List<Address> addresses = new List<Address>();
addresses.Add(address);
inst.Addresses = addresses;
db.Institutions.Add(inst);
db.SaveChanges();
您可以通过在DbContext中重写OnModelCreating来控制一对多关系(以及外键定义)。类似于以下内容的操作应该可以工作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Institution>().HasMany<Address>(i => i.Addresses)
.WithRequired(i => i.Institution).HasForeignKey(i => i.Id);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()有许多(i=>i.Addresses)
.WithRequired(i=>i.Institution)。HasForeignKey(i=>i.Id);
}
用构造函数定义机构
public class Institution
{
public Institution()
{
Addresses = new Addresses<Student>();
}
[Key]
public int ID { get; set; }
[Display(Name="Institution Name")]
public string Name { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
如果主实体是自动递增的,则必须首先将其保存到db以生成其ID。然后将其分配给您的address对象。这就是为什么建议为您拥有的每个对象创建单独的存储库类的原因。这正是我所期望的。我只是不确定是否有某种内在的方式。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Institution>().HasMany<Address>(i => i.Addresses)
.WithRequired(i => i.Institution).HasForeignKey(i => i.Id);
}
public class Institution
{
public Institution()
{
Addresses = new Addresses<Student>();
}
[Key]
public int ID { get; set; }
[Display(Name="Institution Name")]
public string Name { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
Institution inst = new Institution();
inst.Name = "Institution Name";
Address address = new Address();
address.Street1 = "1234 west main";
address.City = "Gotham";
address.State = "WI";
address.PostalCode = "55555";
inst.Addresses.Add(addresses);
db.Institutions.Add(inst);
db.SaveChanges();