当 Enlist=False 时,为什么 Sqlserver 会在事务中登记?

问题描述

使用entity Framework 5 (5.0.4)和本地SQL Server,为什么下面的代码没有在数据库中创建一行?

注意连接字符串包含Enlist=False

using System;
using System.Transactions;
using Microsoft.EntityFrameworkCore;

namespace EfTransaction
{
    public class Program
    {
        public static void Main()
        {
            var scope = new TransactionScope();
            var ctx = new MyDbContext();
            var eObj = new MyEntityObject { Name = "My New Object" };

            ctx.Set<MyEntityObject>().Add(eObj);
            
            ctx.SaveChanges();
            
            scope.Dispose();

            Console.WriteLine("Done");
        }
    }
    
    public class MyDbContext : DbContext
    {
        public DbSet<MyEntityObject> MyObjects { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                "Server=.;Initial Catalog=MyDb;User Id=sa;Password=hunter2;Integrated Security=false;MultipleActiveResultSets=true;Enlist=False;");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<MyEntityObject>().HasKey(x => x.Name);
        }
    }
    
    public class MyEntityObject
    {
        public string Name { get; set; }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)