EF Core Update-Database命令为用户创建模式,而不是使用dbo

时间:2018-03-22 11:50:35

标签: sql-server entity-framework .net-core migration entity-framework-core

我使用EF Core 2.0创建了DbContext,并且已经在PM-Console中使用Update-Database在开发环境中应用了大量迁移。 这些表是使用我的localDb上的dbo模式按预期创建的,正如我从EF6中所知。

但是,当我将Update-Database命令应用于MSSQL Server上的生产数据库时,它会创建一个名为Domain\Username的模式(我的用户来自我的机器)。然后,当我使用其指定的域帐户运行服务器应用程序时,它无法访问数据库。作为一种解决方法,我与IT基础架构人员讨论了允许此帐户在我的计算机上执行软件并通过使用此帐户执行VisualStudio来应用迁移。然后创建此特殊帐户的模式,然后它可以从Web服务器应用程序访问数据库。它起作用,因为这个特殊帐户目前是唯一需要直接访问数据库的人(除了我自己)。但这应该是一个永久的解决方案。

有谁知道这方面的解决方案?数据库的创建方式与以前的EF6项目完全相同。 为什么仅在将迁移应用于生产系统而不是在我的开发机器上时才使用每用户模式,以及如何手动控制模式? 我试过modelBuilder.HasDefaultSchema("dbo");,但这不起作用。实际上它似乎没有任何影响。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并认为这是由于我的domain\user列在MyDatabase -> Security -> Users下引起的。我通过从用户中删除帐户(右键单击->删除)解决了该问题,下次我运行update-database时,它在表之前正确地加上了'dbo'。

enter image description here

答案 1 :(得分:0)

在db上下文中调用float someFloatVal = (float)someIntegerArray[a][b][c]; 为我解决了这个问题(EF 3.1.7),但是当您生成迁移时(而不是在应用迁移时)它必须存在。这使EF将modelBuilder.HasDefaultSchema("dbo")添加到对schema: "dbo"的调用中,从而覆盖了SQL的默认设置(具体取决于提供程序/实现的不同)。

IMO,为您的模型指定模式总是一个好主意。