C# EF Core已确保删除抛出“无法使用用户“sa”登录”
我试图通过使用Microsoft文档中的代码,使用EF Core实现单元/集成测试 但是调用EnsureDeleted不起作用,它会抛出一个错误 SqlException:用户“sa”登录失败 这是MS文档中的示例: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
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可以纠正此问题。非常感谢。