无法使用实体框架代码优先创建具有凭据的数据库?



我对代码优先方法有点陌生,但是在使用实体框架之前我使用了数据库优先方法,现在我想先使用代码,这是一种习惯。

我开始创建模型,一切都很好,然后也启用了迁移和添加迁移,一切正常,但是当我运行 Update-Database 命令时出现错误。

因此,我想使用凭据创建一个代码优先的数据库,经过大量研究,我没有找到解决方案,大多数教程都使用"可信连接"。

我使用什么

应用配置

<connectionStrings>
<add name="CodeFirst" connectionString="Server=.SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;"
providerName="System.Data.SqlClient" />
</connectionStrings>

数据库上下文类

public class CodeFirstContext : DbContext
{
public CodeFirstContext() : base("name=CodeFirst")
{
}
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}

我得到的错误

Login failed for user 'anyuser'.

问题是我做错了什么? 或者使用凭据不能使用代码优先方法完成?

提前致谢

OP:

我想使用凭据创建代码优先的数据库,

。和:

经过大量研究,我没有找到解决方案,大多数教程都使用"可信连接"。

在使用特定登录名部署到新数据库时,代码优先方法存在问题 - 这是先有鸡还是先有蛋,因为:

  1. 数据库尚不存在
  2. 连接字符串正在请求显式登录
  3. 登录名在 SQL 中尚不存在
  4. 因为数据库不存在

OP的配置:

<connectionStrings>
<add name="CodeFirst" 
connectionString="Server=.SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;" 
... />
</connectionStrings>

那么解决方案是什么?

  1. 使用集成安全性:这允许您从代码从头开始创建数据库。 但是,您可能需要的任何其他登录名可能必须在以后创建。 但是,从数据库上讲,这是一种不好的做法,因为您应该拥有一个帐户进行部署(具有足够的部署权限(和另一个用于常规应用程序访问的帐户(并且没有部署权限(

  2. 首先创建登录名
  3. :这允许您使用指定的登录名,但是您很可能需要先从SQL创建一个空白数据库,然后才能创建登录名。 代码优先的纯粹主义者可能不喜欢这个想法。

后者确实遵循了 DACPAC 最佳实践,您应该从数据库优先时代就已经熟悉。 就像 DACPAC 不应该部署登录名和调整安全性一样,也不应该首先使用代码。 毕竟,归根结底,数据库并不关心您是使用代码优先还是数据库优先(在幕后,两者都可能采用某种形式的加密脚本(,但您的数据库管理员可能会根据安全性的使用方式引起注意。

数据库优先方法更好吗?

在">不要那样做">的主题中,试试这个,代码优先试图通过代码做所有事情,而崇高的追求可能并不现实。 如上所述,尝试创建登录名等某些操作可能无法实现。

同时,通过从数据库端部署 DACPAC,执行数据库优先架构更改。 身份验证是通过首先用于进入 SSMS(例如(的登录名进行的。DACPAC 部署不需要代码、.NET 或其他。

DACPAC可以创建和/修改数据库安全性,包括登录,但通常不受欢迎。

您可能希望首先重新考虑代码。 代码优先和 EF 迁移在现实世界中并没有真正成功,在现实世界中,你已经暂存了 CD 环境(如 DEV(;测试;UAT 和 PROD。

我看到很多开发人员仅使用代码优先部署到他们的本地数据库。 到达那里后,他们使用不同的方法将更改部署到其他计算机,包括TEST 和 PROD,无论是 TSQL 脚本还是数据库备份。

对于甚至没有完成比赛的事情来说,这似乎需要付出很大的努力。

相关内容

最新更新