我有一个在本地完美运行的Web项目。但是,当我在Azure上已发布的网站中更改连接字符串以连接到SQL Azure上的数据库时,它将开始出现此错误。
System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception. at MyClass.OnModelCreating(DbModelBuilder modelBuilder) in c:\a\src\MyProject\Model.Context.cs:line 25 at System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder() at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() at System.Linq.Queryable.Select[TSource,TResult](IQueryable`1 source, Expression`1 selector)
我的配置有:
<connectionStrings> <add name="MyDBEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string="Server=tcp:[Removed].database.windows.net,1433;Database=MyDB;User ID=[Removed];Password=[Removed];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"" providerName="System.Data.EntityClient" /> <add name="MyDB" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="Server=tcp:[Removed].database.windows.net,1433;Database=MyDB;User ID=[Removed];Password=[Removed];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"" providerName="System.Data.EntityClient" /> </connectionStrings>
我使用该连接字符串在本地使用单元测试进行了测试,并且该测试可以从连接到SQL Azure数据库的本地计算机上运行。任何帮助表示赞赏。
我今天遇到了这个确切的问题;这是我第一次部署到Azure。我一直在拔头发,除了我没剩了。 我终于想通了,这可能与原始海报的问题相同。
就像原始海报一样,我在以下配置中进行了测试:
我发现 也许Azure网站没有读取web.config的连接字符串 。回想一下如何创建Azure网站,我记得 我给Azure SQL DB赋予了一个别名,其别名与web.config中连接字符串的“标签”的名称完全相同! 澄清:
因此,我销毁了我的Azure SQL DB和我的Azure网站。然后,我重新创建了Azure网站,但是这次,我要求输入“ SsnCustInfoModelContainer_Proto”的连接字符串“ alias”以连接到关联的Azure SQL Server。从本地SQL Server Management Studio初始化Azure SQL DB之后,我再次将WCF Web应用程序部署到Azure网站(当然,我必须下载新的部署配置文件),然后再次尝试了该应用程序。这次它起作用了- “别名”“ SsnCustInfoModelContainer_Proto”与EF没有冲突,也没有被EF找到。 相反,EF继续在web.config中找到包含所有正确元数据的真实连接字符串。 问题解决了。