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