C# EF Core已确保删除抛出“无法使用用户“sa”登录”

C# EF Core已确保删除抛出“无法使用用户“sa”登录”,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我试图通过使用Microsoft文档中的代码,使用EF Core实现单元/集成测试 但是调用EnsureDeleted不起作用,它会抛出一个错误 SqlException:用户“sa”登录失败 这是MS文档中的示例: public class SharedDatabaseFixture : IDisposable { private static readonly object LockObject = new object(); private static bool isD

我试图通过使用Microsoft文档中的代码,使用EF Core实现单元/集成测试

但是调用EnsureDeleted不起作用,它会抛出一个错误

SqlException:用户“sa”登录失败

这是MS文档中的示例:

public class SharedDatabaseFixture : IDisposable
{
    private static readonly object LockObject = new object(); 
    private static bool isDatabaseInitialized; 

    public SharedDatabaseFixture()
    {
        Connection = new SqlConnection("Server =; Database=; User Id=; Password=");

        Seed();
    
        Connection.Open();
    }

    public DbConnection Connection { get; }

    public OnlineMenuContext CreateContext(DbTransaction transaction = null)
    {
        var context = new OnlineMenuContext(
            new DbContextOptionsBuilder<OnlineMenuContext>().UseSqlServer(Connection)
                .Options
            );

        if (transaction != null)
        {
            context.Database.UseTransaction(transaction);
        }
    
        return context;
    }

    private void Seed()
    {
        lock (LockObject)
        {
            if (isDatabaseInitialized) return;

            using var context = CreateContext();

            context.Database.EnsureDeleted(); // Crashes HERE                
            context.Database.EnsureCreated();
                    
            context.Products.Add(DummyData.Product);
            context.SaveChanges();

            isDatabaseInitialized = true;
        }
    }

    public void Dispose() => Connection.Dispose();
}
我正在使用MacOs运行这些示例

也许有一些我不知道的事情是如何完成的

我的问题是:它为什么抛出这个异常,以及如何修复它

更新:

我使用代码验证了用户SA的权限, 从fn_my_权限'dbo','SCHEMA'中选择*

结果如下:


很抱歉延迟,看起来像是在发送新的SqlConnectionPerfectly working连接字符串时导致此问题。尝试直接发送所述的连接字符串

 var context = new Context(
            new DbContextOptionsBuilder<Context>()
            .UseSqlServer(@"Server=xxx; Database=myDb; Encrypt=False;User Id=sa; Password=xxxxx").Options);
        
        var tr = context.Database.EnsureCreated();
        context.Database.Migrate();
        context.Database.EnsureDeleted(); // No Loner an issue it works
        Console.WriteLine("Hello World!");

很抱歉延迟,看起来像是在发送新的SqlConnectionPerfectly working连接字符串时导致此问题。尝试直接发送所述的连接字符串

 var context = new Context(
            new DbContextOptionsBuilder<Context>()
            .UseSqlServer(@"Server=xxx; Database=myDb; Encrypt=False;User Id=sa; Password=xxxxx").Options);
        
        var tr = context.Database.EnsureCreated();
        context.Database.Migrate();
        context.Database.EnsureDeleted(); // No Loner an issue it works
        Console.WriteLine("Hello World!");
我找到了解决办法

我应该在我的连接字符串中添加Persist Security Info=true

它毕竟不是那么完美:我找到了解决办法

我应该在我的连接字符串中添加Persist Security Info=true


它毕竟不是那么完美:D

如果其他人仍然有问题,请确保您正在使用


使用Microsoft.Data.SqlClient;不使用System.Data.SqlClient

如果其他人仍有问题,请确保您正在使用


使用Microsoft.Data.SqlClient;不使用System.Data.SqlClient

当你说完美工作的连接字符串是什么类型的连接类型时,它有删除数据库的权限吗?我想这是由于一些权限,我连接到SQL server db,服务器=localhost;数据库=myDb;用户Id=sa;Password=123456连接字符串类型,缺乏权限是一个很好的理论,但我已经检查过了,用户sa有权限删除尝试使用web应用创建数据库,然后使用sa帐户登录到sql server management studio并手动删除,这将排除权限问题,我可以使用用户sa手动删除数据库,或者您想检查其他内容?1确保包括Trusted_Connection=False;和Encrypt=False;在您的连接字符串中。2在SSMS 3中测试连接字符串Add.EnableSensitiveDataLogging以使用SQLServer确保您看到生成的所有运行时SQL当您说完美工作的连接字符串什么类型的连接类型时,它是否有删除数据库的权限?我想这是由于一些权限,我连接到SQL server db,服务器=localhost;数据库=myDb;用户Id=sa;Password=123456连接字符串类型,缺乏权限是一个很好的理论,但我已经检查过了,用户sa有权限删除尝试使用web应用创建数据库,然后使用sa帐户登录到sql server management studio并手动删除,这将排除权限问题,我可以使用用户sa手动删除数据库,或者您想检查其他内容?1确保包括Trusted_Connection=False;和Encrypt=False;在您的连接字符串中。2测试SSMS 3中的连接字符串添加.EnableSensitiveDataLogging以使用SQLServer,以确保看到所有运行时SQL GenerateEdit工作!,非常感谢。但为什么?我不是专家,但我理解的是,当您传递dbconenction对象时,它管理连接的方式是不同的!,非常感谢。但为什么?我不是专家,但我理解的是,当您传递dbconenction对象时,它管理连接的方式是不同的。是的,我刚刚失去了2个小时的生命,我将无法返回此问题,并找到您的评论:-并且在连接字符串中添加Persist Security Info=true可以纠正此问题。谢谢。是的,我失去了2个小时的生命,我将无法恢复此问题,并找到了您的评论:-并且在连接字符串中添加Persist Security Info=true可以纠正此问题。非常感谢。