【发布时间】:2018-07-04 07:47:16
【问题描述】:
使用 Entity Framework 6 和 MySQL,我正在尝试将数据从“生产”数据库表存档到“存档”数据库。我为每个数据库创建了两个 DBContext。每个数据库都有相同的架构。
我可以使用以下代码将整个数据表从生产数据库移动到存档数据库:
using (MyDBContext archiveContext =
MyDBContext.CreateEntitiesForSpecificDatabaseName("archive_db"))
using (MyDBContext prodContext =
MyDBContext.CreateEntitiesForSpecificDatabaseName("prod_db"))
{
if(prodContext.myTable.Any())
{
archiveContext.myTable.AddRange(prodContext.myTable.AsNoTracking());
archiveContext.SaveChanges();
}
}
但是我不想归档整个表,我只想归档某个日期之前的数据,所以我尝试了以下方法:
using (MyDBContext archiveContext =
MyDBContext.CreateEntitiesForSpecificDatabaseName("archive_db"))
using (MyDBContext prodContext =
MyDBContext.CreateEntitiesForSpecificDatabaseName("prod_db"))
{
IQueryable<myTable> dataToArchive =
from mt in prodContext.myTable
where mt.date < DateTimeSixMonths
select mt;
archiveContext.myTable.AddRange(dataToArchive);
archiveContext.SaveChanges();
}
但我无法绕过运行此程序时遇到的异常:
System.InvalidOperationException: '一个实体对象不能 被多个 IEntityChangeTracker 实例引用。'
它出现在这一行:
archiveContext.myTable.AddRange(dataToArchive);
是否有可能以某种方式从“dataToArchive”中删除跟踪
【问题讨论】:
标签: mysql .net entity-framework