【发布时间】:2015-04-19 23:10:00
【问题描述】:
我正在尝试在事务中进行一些相关的插入,但出于某种原因,EF 不断插入多个重复记录。我在这里能找到的最接近的是多对多问题,但这并不能解决我的问题。
这是我想要做的:
public void UploadFilesToStorage(MetadataLineCollection metadata, string outputDirectory)
{
using (var scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(15)))
using (var context = new DbEntities())
{
decimal newJobId = CreateNewJob(context, metadata.CommonMetadata.OriginalFileName);
foreach (var item in metadata.Items)
{
var fingerprint= service.UploadFile(outputDirectory + "\\" + item.TifFileName);
StoreFileInfo(context, newJobId, imageFingerprint, item);
}
var csvFingerprint = service.UploadFile(outputDirectory + "\\" + metadata.CsvFileName);
StoreFingerprint(context, newJobId, csvFingerprint);
CreateNewDelivery(context, newJobId);
scope.Complete();
context.AcceptAllChanges();
}
}
如您所见,我将相同的上下文传递给每个应该使用相关数据的函数。这些电话中的每一个都调用context.SaveChanges(false)。
仍然会创建多个相同的作业(但只有第一个具有指纹,因为其余作业具有不同的 jobId),并且每个元数据项也被存储多次!此外,重复的数量是不同的(一个元数据项是 8 个,另一个是 3 个,等等......)
我错过了什么吗?
【问题讨论】:
标签: c# entity-framework transactionscope duplicate-data