Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# 使用EntityFrameWork添加新条目,实现多对多关系_C#_Entity Framework - Fatal编程技术网

C# 使用EntityFrameWork添加新条目,实现多对多关系

C# 使用EntityFrameWork添加新条目,实现多对多关系,c#,entity-framework,C#,Entity Framework,天哪!请解释行为实体框架: 创建模型: public class Types { [Key] public int Id {get; set;} public string Name {get; set;} public virtual ICollection<ControlCheck> ControlChecks {get; set;} } public ControlCheck { [Key] public int Id

天哪!请解释行为实体框架:

创建模型:

public class Types
{
     [Key]
     public int Id {get; set;}
     public string Name {get; set;}
     public virtual ICollection<ControlCheck> ControlChecks {get; set;}
}

public ControlCheck
{
    [Key]
    public int Id {get;set;}
    public string Data {get; set;}
    public virtual ICollection<Types> CheckTypes {get; set;}
}


public partial class ModeMy : DbContext
{
    public ModeMy()
        : base("name=ConnectionString")
    {
    }

    ...........
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Types>()
            .HasMany<ControlCheck>(cc => cc.ControlChecks)
            .WithMany(c=>c.CheckTypes)
            .Map(cc=>
                {
                    cc.MapLeftKey("ControlCheckType_Id");
                    cc.MapRightKey("ControlChecks_Id");
                    cc.ToTable("ControlCheckTypeControlChecks");
                });
    }
}
接下来,在循环中添加条目:

ModeMy context = new ModeMy(); 
......

while (someCondition)
{
    List<Types> selectedTypes = new List<Types>();
    selectedTypes.Add(context.Types.Where(t=>t.Name.Contains("a")).Single());
    selectedTypes.Add(context.Types.Where(t=>t.Name.Contains("b")).Single());
     selectedTypes.Add(context.Types.Where(t=>t.Name.Contains("c")).Single());
    selectedTypes.Add(context.Types.Where(t=>t.Name.Contains("d")).Single()); 

   ControlCheck newCheck = new ControlCheck 
   {
      Name = "SomeName",
      CheckTypes = selectedTypes 
   }

   context.ControlCheck.Add(newCheck);
   context.SaveChanges();  
}

......
当组织一个多对多实体时,会创建一个附加表来固定记录的关联,但当在循环外部创建上下文实例时,将记录添加到ControlCheck表只是更新了关系表中的一些记录,而它应该创建新记录,当创建上下文移动到循环中时,问题就解决了。在本例中,外接程序ControlCheck的每个新记录都反映在表关系中。 为什么会发生这种情况?为什么我不能使用循环外创建的cantext实例

塔克斯