Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# EF DbContext更新实体集合_C#_Linq_Entity Framework - Fatal编程技术网

C# EF DbContext更新实体集合

C# EF DbContext更新实体集合,c#,linq,entity-framework,C#,Linq,Entity Framework,这就是我的域名的外观: public abstract class Field { //PK public int FieldId { get; set; } //FK [ForeignKey("FieldConfig")] public int FieldConfigId { get; set; } //Relations public virtual Fie

这就是我的域名的外观:

public abstract class Field
    {
        //PK
        public int FieldId { get; set; }        
        //FK
        [ForeignKey("FieldConfig")]
        public int FieldConfigId { get; set; }
        //Relations
        public virtual FieldConfig FieldConfig { get; set; }
    }

public class FieldConfig
    {
        //PK
        public int FieldConfigId { get; set; }
        //Columns
        public string Name { get; set; }
        //FK
        [ForeignKey("LabelType")]
        public int? LabelTypeId { get; set; }
        //Relations
        public virtual LabelType LabelType { get; set; }
        public virtual ICollection<Field> Fields { get; set; }
    }
当我这样做时,它会在我的数据库中添加3个新字段,而不是普通的ID,因此看起来如下所示: 1-奥德菲尔德 2-奥德菲尔德 3-奥德菲尔德 4-纽菲尔德 5-纽菲尔德 6-纽菲尔德

然后我尝试先删除旧元素,如下所示:

foreach (Field f in fc.Fields.ToList())
            ((IObjectContextAdapter)context).ObjectContext.DeleteObject(f);
这是可行的,但当我添加新字段时,他们显然得到了另一个Id

所以我的问题是,在维护Id的同时,如何在不添加新字段的情况下更新此集合?(并不是说我使用DbContext作为上下文)

我已经检查过我总是使用相同的上下文


谢谢您的帮助。

根据您提供的信息,这里是我的建议:

fc.Fields = NewFields;
我在任何地方都看不到这些
NewFields
集合,但我怀疑它们不是当前fc.Fields的修改版本。如果自动生成
字段id
,当您提供与旧值id相同的新值时,EF不会修改它们,而是插入新值

以下是我认为你想要做的:

FieldConfig fc = ...;
fc.Name = fieldConfig.Name;

foreach(var field in fc.Fields)
{
    /*Modify each field properties with the corresponding properties of Newfields, e.g.:
      var newField = NewFields.First(nf => nf.FieldId == field.FieldId);
      field.FieldConfig = newField.FieldConfig;
    */
}
labelTypeRepo.SaveChanges();
希望能有帮助

FieldConfig fc = ...;
fc.Name = fieldConfig.Name;

foreach(var field in fc.Fields)
{
    /*Modify each field properties with the corresponding properties of Newfields, e.g.:
      var newField = NewFields.First(nf => nf.FieldId == field.FieldId);
      field.FieldConfig = newField.FieldConfig;
    */
}
labelTypeRepo.SaveChanges();