Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过实体框架5将复杂模型保存到数据库_C#_Entity Framework_Entity Framework 5 - Fatal编程技术网

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