我有一个在本地完美运作的网络项目。 但是,当我在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数据库的本地计算机上运行。 任何帮助表示赞赏。
答案 0 :(得分:15)
我今天遇到了这个问题;这是我第一次部署到Azure。我一直把头发拉出来,除非我没有留下任何东西。 我终于明白了,这可能与原版海报的问题相同。
就像原始海报一样,我在这些配置中进行了测试:
在阅读了另一篇文章(Code First vs. Database First)后,我得到了一个提示。那篇文章说如果&#34;连接字符串有元数据,EF认为它是Model First或Database First&#34;但如果它是一个普通的连接字符串,那么EF认为它是Code First。&#34;我浏览了部署的Azure Web站点的web.config,并确认连接字符串具有对Model-First元数据的正确引用。那问题是什么?
我认为也许Azure网站没有读取web.config的连接字符串。回想一下我是如何创建Azure网站的,我记得我给Azure SQL DB一个别名,其名称与我的连接字符串的名称相同&#39; s&#39;标签&#39;在web.config !! 澄清:
所以我销毁了我的Azure SQL数据库和我的Azure网站。然后我重新创建了Azure网站,但这次我要求连接字符串&#39;别名&#39; &#34; SsnCustInfoModelContainer_Proto&#34;用于连接到关联的Azure SQL Server。在从我的本地SQL Server Management Studio初始化Azure SQL DB之后,我再次将WCF Web应用程序部署到Azure Web站点(当然,我必须下载新的部署配置文件才能执行此操作),我再次尝试了该应用程序。这次它起作用了 - &#39;别名&#39; &#34; SsnCustInfoModelContainer_Proto&#34;与EF没有冲突,也没有找到。 EF改为继续在web.config中找到所有正确元数据的真正连接字符串。问题已解决。