Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 使用实体框架保存实体图_C#_.net_Entity Framework 6 - Fatal编程技术网

C# 使用实体框架保存实体图

C# 使用实体框架保存实体图,c#,.net,entity-framework-6,C#,.net,Entity Framework 6,我正在使用EntityFramework 6编写数据访问层。我想要的是,当我在DbContext上调用SaveChanges()方法时,它会将实体与通过导航属性关联的一组相关实体一起保存。下面是我正在尝试执行的简单代码 public class Customer { public long ID { get; set; } public string Name { get; set; } public virtual IEnumberable<PhoneNumbe

我正在使用EntityFramework 6编写数据访问层。我想要的是,当我在DbContext上调用
SaveChanges()
方法时,它会将实体与通过导航属性关联的一组相关实体一起保存。下面是我正在尝试执行的简单代码

public class Customer
{
    public long ID { get; set; }
    public string Name { get; set; }

    public virtual IEnumberable<PhoneNumber> { get; set; }
}

public class PhoneNumber
{
    public long ID { get; set; }
    public string Number { get; set; }
}    

public class SampleContext : DbContext
{
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<PhoneNumber> PhoneNumbers { get; set; }
}

using(var context = new SampleContext())
{
     var customer = new Customer { ID = 1, Name = "John" };
     customer.PhoneNumbers = new PhoneNumbers[]
     {
          new PhoneNumber { ID = 1, Number = "1.111.1111111" },
          new PhoneNumber { ID = 2, Number = "1.111.1111112" }
     }
     context.Customers.Add(customer);
     context.SaveChanges();
}
公共类客户
{
公共长ID{get;set;}
公共字符串名称{get;set;}
公共虚拟IEnumberable{get;set;}
}
公共类电话号码
{
公共长ID{get;set;}
公共字符串编号{get;set;}
}    
公共类SampleContext:DbContext
{
公共虚拟数据库集客户{get;set;}
公共虚拟数据库集电话号码{get;set;}
}
使用(var context=new SampleContext())
{
var customer=新客户{ID=1,Name=“John”};
customer.PhoneNumbers=新电话号码[]
{
新电话号码{ID=1,Number=“1.111.1111111”},
新电话号码{ID=2,Number=“1.111.1111112”}
}
context.Customers.Add(客户);
SaveChanges();
}

上述代码将客户保存在customers表中,但不保存PhoneNumber表中的任何内容。

奇怪,但找到了解决方案。上面的代码需要稍加修改才能正常工作。修改内容如下:

 //In Customer class, changed following line:
 public virtual IEnumberable<PhoneNumber> { get; set; }

 //To:
 public virtual ICollection<PhoneNumber> { get; set; }

 //Then in using block initialized entities as follows:
 using(var context = new SampleContext())
 {
      var customer = new Customer { ID = 1, Name = "John", PhoneNumbers = new List<PhoneNumber>() };
      customer.PhoneNumbers.Add(new PhoneNumber { ID = 1, Number = "1.111.1111111" });
      context.Customers.Add(customer);
      context.SaveChanges();
 }
//在Customer类中,更改了以下行:
公共虚拟IEnumberable{get;set;}
//致:
公共虚拟ICollection{get;set;}
//然后使用块初始化实体,如下所示:
使用(var context=new SampleContext())
{
var customer=new customer{ID=1,Name=“John”,PhoneNumbers=new List()};
customer.PhoneNumbers.Add(新电话号码{ID=1,Number=“1.111.1111111”});
context.Customers.Add(客户);
SaveChanges();
}

@Yanshof,该博客与众不同,导航属性的概念在该博客中完全被搞乱了。