实体框架关系和AutoDetectChanges=错误问题
本文关键字:错误 问题 AutoDetectChanges 框架 关系 实体 | 更新日期: 2023-09-27 17:58:18
我的目标是实现大规模的插入/更新操作。域模型由图像实体组成,该实体与文件夹多对一实体相关。
通常情况下,我会通过以下方式将图像添加到数据库上下文中:
var folder = dbContext.Folders.First();
var image = new Image();
image.Folder = folder;
image.<SomeFields> = "<SomeData>";
dbContext.Images.Add(image);
dbContext.SaveChanges();
为了获得更好的性能,我关闭了自动更改跟踪:
dbContext.Configuration.AutoDetectChangesEnabled = false;
现在我得到一个错误:
"DbContext.Images"中的实体参与"Image_Folder"关系找到0个相关的"Image_Folder_Target"。1.应为"Image_Folder_Target"。
我尝试使用:
folder.Images.Add(image);
dbContext.Entry(folder).State = EntityState.Modified;
但这无济于事。
我应该如何修复错误?
UPD:固定代码段
UPD2:简化的实体(删除了基类的继承(使代码更可读)和大多数不必要的属性):
图像.cs
public class Image
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string AuthorName { get; set; }
public string AuthorUrl { get; set; }
[StringLength(255)]
[Required]
[Column(TypeName = "VARCHAR")]
public new string File { get; set; }
[Required]
public bool IsCover { get; set; }
[Required]
public int Order { get; set; }
public virtual Product Product { get; set; }
[Required]
public virtual Folder Folder { get; set; }
public override string ToString()
{
return File;
}
public Image()
{
Order = 1;
}
}
文件夹.cs
public class Folder
{
public int Id { get; set; }
public virtual Folder Parent { get; set; }
public virtual ICollection<Image> Images { get; set; }
public virtual ICollection<Folder> Folders { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
public Folder()
{
Images = new HashSet<Image>();
}
}
我测试了您的代码,没有出现异常,但没有数据插入数据库。试试这个,替换***代码
dbContext.Configuration.AutoDetectChangesEnabled = false;
var folder = dbContext.Folders.First();
var image = new Image();
image.Folder = folder;
image.<SomeFields> = "<SomeData>";
**dbContext.Entry(image).State = EntityState.Added; **
dbContext.SaveChanges();