c# - 在将数据保存到多个表时无法跟踪实体类型的实例
问题描述
在这里,我试图在单次提交时将人员详细信息保存在Person
表格中,并将人员相关文件保存到表格中。但是在提交时它显示错误说in line 。下面是我的代码和表结构PersonFileUpload
'The instance of entity type 'PersonFileUpload' cannot be tracked because another instance with the same key value for {'FileId'} is already being tracked.
uow.Repository<Person>().Add(person);
public Person PersonModel { get; set; } = new Person();
IReadOnlyList<IBrowserFile> selectedFiles;
public void postPerson()
{
List<PersonFileUpload> fileList = new List<PersonFileUpload>();
foreach (var file in selectedFiles)
{
fileList.Add(new PersonFileUpload() { UploadedFileName = file.Name });
}
PersonModel.PersonFileUpload = fileList;
mainService.SavePerson(PersonModel);
}
public void SavePerson(Person person)
{
if (person.PersonId == 0)
{
uow.Repository<Person>().Add(person);
uow.Commit();
}
else
{
uow.Repository<Person>().Edit(person);
uow.Commit();
}
}
人表
public partial class Person
{
public Person()
{
PersonFileUpload = new HashSet<PersonFileUpload>();
}
public int PersonId { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public int? CountryId { get; set; }
public int? CityId { get; set; }
public virtual ICollection<PersonFileUpload> PersonFileUpload { get; set; }
}
PersonFileUpload 表
public partial class PersonFileUpload
{
public int FileId { get; set; }
public int? PersonId { get; set; }
public string UploadedFileName { get; set; }
public virtual Person Person { get; set; }
}
解决方案
您的代码中可能有多种原因/位置导致此问题。简而言之,您的数据库上下文跟踪了多个 PersonFileUpload 实例,其中一个实例可能是您获取这些对象时,而另一个实例是您尝试保存它们时。几乎没有立即想到的原因,但是如果没有您提供的更多代码,则无法确定是哪一个。由于您似乎显然正在使用工作单元,我猜您正在获取 PersonFileUpload 文件,这些文件在您为您的人调用 Add 之前仍由您的上下文跟踪。
当您获取您的 PersonFileUpload 实体时,您可以尝试执行下一步:
尝试使用 AsNoTracking:
var fileUploads = dbContext.PersonFileUploads.AsNoTracking().Where(...).ToList();
或者您可以对 PersonFileUpload 实体使用 Detach:
dbContext.Entry(fileUploadEntity).State = EntityState.Detached
推荐阅读
- flutter - 颤振自动测试:点击按钮在抽屉中不起作用
- mysql - 如何使用别名显示没有错误的日期和月份 - mysql
- javascript - 添加图像以及动画线串
- android - Qt,MediaScannerConnection 在第二次创建文件夹时不起作用
- php - Codeigniter 3 表单验证未按预期工作
- selenium - 如何使用 Selenium Python 从网站中提取产品标题
- java - Spring JPA中的多对一关联不更新相关实体
- javascript - 处理 React 表单的状态
- spring-boot - 带hdiv的弹簧靴
- python - 无法在 Django 模板中嵌入 JSON Bokeh Plot