gpt4 book ai didi

c# - 使用具有自己的事务范围的多个 DbContext

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:50 25 4
gpt4 key购买 nike

我需要同时从两个不同的 DbContext 访问数据,确保每个查询都使用 READ UNCOMMITTED(真的,重要的是它不会锁定它迭代的行 - 添加 WITH NO LOCK 查询也可以工作)。

如何使用 Entity Framework 做到这一点?如果我将两个查询中的每一个都包装在 TransactionScope 中,它会尝试将事务提升到 MSDTC,这对我们来说不是一个选项。

private static IEnumerable<Image> EnumerateSourceImages()
{
using (var dbContext = new SourceDbContext())
{
using (var transScope = new TransactionScope(
TransactionScopeOption.RequiresNew,
new TransactionOptions() {
IsolationLevel = IsolationLevel.ReadUncommitted
}
)
)
{
var imagesSourceQuery = dbContext.ImageDatas
.AsNoTracking()
.OrderBy(imageData => imageData.ImageID)
foreach (var image in imagesSourceQuery)
{
yield return image;
}
transScope.Complete();
}
}
}
private static IEnumerable<Image> EnumerateDestinationImages()
{
using (var dbContext = new DestinationDbContext())
{
using (var transScope = new TransactionScope(
TransactionScopeOption.RequiresNew,
new TransactionOptions() {
IsolationLevel = IsolationLevel.ReadUncommitted
}
)
)
{
var imagesSourceQuery = dbContext.ImageDatas
.AsNoTracking()
.OrderBy(imageData => imageData.ImageID)
foreach (var image in imagesSourceQuery)
{
yield return image;
}
transScope.Complete();
}
}
}
private static void main(string[] args){
{
IEnumerator<ItemImage> sourceImagesEnumerator = null;
IEnumerator<ItemImage> destImagesEnumerator = null;
try{
sourceImagesEnumerator = EnumerateSourceImages().GetEnumerator();
destImagesEnumerator = EnumerateDestinationImages().GetEnumerator();

bool sourceHasMore = sourceImagesEnumerator.MoveNext();
//Exception on next line about MSDTC Promotion
bool destHasMore = destImagesEnumerator.MoveNext();
} finally{
if(sourceImagesEnumerator != null) sourceImagesEnumerator.Dispose();
if(destImagesEnumerator != null) destImagesEnumerator.Dispose():
}
}

最佳答案

您是否尝试在连接字符串中设置 enlist=false?

http://forums.asp.net/t/1401606.aspx/1

兄弟们,拉里

关于c# - 使用具有自己的事务范围的多个 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com