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实例
塔克斯