通过实体框架5将复杂模型保存到DB

本文关键字:模型 保存 DB 复杂 实体 框架 | 更新日期: 2023-09-27 18:29:15

给定以下代码,我正试图将复杂对象Institution保存到数据库中。如果我取出引用来寻址,则基本机构会正确保存,但添加了地址后,我会出现外键错误,并且不会保存任何内容。保存复杂类的正确方法是什么?

   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();

机构类别:

 public class Institution
{
    [Key]
    public int ID { get; set; }
    [Display(Name="Institution Name")]
    public string Name { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
}

地址类别:

 public class Address
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Street")]
    public string Street1 { get; set; }
    [Required]
    public string City { get; set; }
    [Required]
    [MaxLength(2)]
    public string State { get; set; }
    [Display(Name = "Zip")]
    public string PostalCode { get; set; }
    public virtual Institution Institution { get; set; }
    public virtual AddressType AddressType { get; set; }
}

通过实体框架5将复杂模型保存到DB

您可以通过重写DbContext中的OnModelCreating来控制一对多关系(和外键定义)。类似于以下的东西应该起作用:

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();