Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法首先使用实体框架代码创建具有凭据的数据库?_C#_Entity Framework_Ef Code First_Entity Framework Migrations_Code First - Fatal编程技术网

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

C# 无法首先使用实体框架代码创建具有凭据的数据库?,c#,entity-framework,ef-code-first,entity-framework-migrations,code-first,C#,Entity Framework,Ef Code First,Entity Framework Migrations,Code First,我对代码优先的方法有点陌生,但在使用实体框架之前,我使用了数据库优先的方法,现在我想改用代码优先,这是一种习惯 我开始创建模型,一切都很好,然后启用迁移和添加迁移,一切都很好,但当我运行updatedatabase命令时,出现了一个错误 因此,我想首先使用凭证创建一个带有代码的数据库,经过大量研究,我没有找到解决方案,而且大部分教程都使用“可信连接” 我用什么 App.Config <connectionStrings> <add name="CodeFirst"

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

我开始创建模型,一切都很好,然后启用迁移和添加迁移,一切都很好,但当我运行updatedatabase命令时,出现了一个错误

因此,我想首先使用凭证创建一个带有代码的数据库,经过大量研究,我没有找到解决方案,而且大部分教程都使用“可信连接”

我用什么

App.Config

  <connectionStrings>
    <add name="CodeFirst" connectionString="Server=.\SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
问题是我做错了什么?或者使用凭证不能使用代码优先的方法

提前感谢

作品:

我想使用凭证首先使用代码创建一个数据库

……和:

经过大量研究,我没有找到解决方案,大部分教程都使用“可信连接”

在使用特定登录名部署到新数据库时,“代码优先”方法的问题就在于此-这是一个“鸡和蛋”
,因为:

  • 数据库还不存在
  • 连接字符串正在请求显式登录
  • 登录名在SQL中尚不存在
  • 因为数据库不存在
  • OP的配置:

    <connectionStrings>
        <add name="CodeFirst" 
             connectionString="Server=.\SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;" 
          ... />
      </connectionStrings>
    
    
    ,代码首先尝试通过代码完成所有事情,而崇高的追求可能并不现实。像上面提到的那样,尝试创建登录可能是不可能的

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

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

    您可能需要首先重新思考代码。代码优先和EF迁移作为一个概念在现实世界中并没有真正成功,在现实世界中,您已经准备好了CD环境,如DEV;试验;UAT和PROD

    我看到很多开发人员只使用代码部署到他们的本地数据库。一旦到了那里,他们使用不同的方法将更改部署到其他计算机上,包括测试和生产,无论是TSQL脚本还是数据库备份


    这似乎是为了一些甚至没有完成比赛的东西付出的巨大努力。

    非常感谢您的反馈,非常感谢您提供的两个解决方案,正如您在我谈到的“可信连接”问题中看到的,我之前实际上使用了第一个解决方案这将转变为集成安全本身,我看到它在生产中存在一些安全问题,第二种解决方案几乎是从现有数据库中首先使用代码,这导致了脚手架,并不是每个人都喜欢反转数据库,我不认为在数据库已经存在时首先使用代码有什么意义。@Null不客气。是的,完全正确,代码优先对于绿色领域非常有用。然而,EF代码优先非常类似于MS处理XMLSOAP服务的方式。他们还采用了代码优先的方法,编译器在事后抛出了WSDL。然后,人们想知道为什么在更大的EAI Java空间中没有任何东西与XML SOAP服务进行通信。在这两种情况下,模式优先是更好的方法。如果您觉得使用代码优先的方法的主要目的是为了能够移动EF Core,不要忘记接受上面的答案作为答案/upvote,因为这个方法只支持代码优先,但这似乎会牺牲安全性,在这种情况下我根本不喜欢。@Null啊好的。随着.NET5(开源和跨平台)将于年底面世,微软将再次回归单一框架,它的寿命也可能很短。不再有.NET Core xxx,当然包括EF Core。然而,在数据库优先/代码优先空间中发生的事情还有待观察。祝您身体健康,感谢您的接受!:)@MicyD非常感谢您提供的关于.NET5的信息,这些信息对我来说是新的,我不知道,再次感谢。
    Login failed for user 'anyuser'.
    
    <connectionStrings>
        <add name="CodeFirst" 
             connectionString="Server=.\SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;" 
          ... />
      </connectionStrings>