使用DbContext的Model First,在初始化新数据库时失败

23

我放弃了。

我找到了这个链接:http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx。看起来很不错,于是我迅速重新设计了我的模型,以充分利用这两种方法的优点。

但是现在我的模型无法创建新数据库(或向现有数据库添加表格)。我遇到了这个错误:

使用基于数据库开发和基于模型开发的 T4 模板生成的代码,在 Code First 模式下使用可能无法正常工作。若要继续使用基于数据库或基于模型,请确保实行应用程序的 Entity Framework 连接字符串在配置文件中指定。若要将从数据库或模型第一生成的这些类与 Code First 一起使用,请使用属性或 DbModelBuilder API 添加任何其他配置,然后删除引发此异常的代码。

发生在:

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

这是我的连接字符串:

    <add name="ForumContextContainer"
 providerName="System.Data.SqlClient"
 connectionString="Data Source=.\SQLExpress; Initial Catalog=iForum; Integrated Security=True"/>
注意。我后来添加了 "Initial Catalog",以尝试是否会起作用,但结果完全相同。
4个回答

33

这个连接字符串是错误的。一旦你在使用模型优先/数据库优先(EDMX),你必须使用实体连接字符串来引用.sddl,.msl和.csdl元数据文件。还要注意,当从EDMX创建模型时,必须在设计时间内创建数据库 = 必须生成SQL脚本并执行它以创建数据库。


其实我已经找到了一种方法,通过更改T4模板来解决问题。不过还是谢谢你的帮助。 - Łukasz Baran
14
@Łukasz Baran,你能分享你的解决方案吗? - Joel Beckham
1
很好的答案——可惜错误信息不能再详细一些。 - Patrick Szalapski
@IanWarburton:可能是的,但是有些与生成的代码无关的类只需要连接字符串就可以正常工作。 - Ladislav Mrnka
好的。只是在这里添加框架配置似乎有些无礼。 - Ian Warburton
显示剩余3条评论

2

我猜这个错误通常出现在将EDMX/db首先添加到解决方案中的类库中时。如果您这样做,请确保在类库项目的App.config文件中添加的连接字符串可在web.config或exe项目配置文件中使用(所以只需将其复制/粘贴到那里)。


这个简单的解决方案对我很有效,而其他所有的尝试都失败了。只需要从模型dll项目中的app.config复制连接字符串部分到MVC应用程序web.config即可。 - Thronk

0
Add this connection string to web config and make changes:

<add name="Entities" 
connectionString="
metadata=res://*/EFmodel.csdl|res://*/EFmodel.ssdl|res://*/EFmodel.msl;
provider=System.Data.SqlClient;provider 
connection string=&quot;
data source=SAI-PC;
initial catalog=OrderDB;
user id=sa;
password=Pass$123;
MultipleActiveResultSets=True;
App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" />

EFmodel is my .edmx file name.

OrderDB is database name.

-1
删除或注释这段代码:
//protected override void OnModelCreating(DbModelBuilder modelBuilder)
//{
//    throw new UnintentionalCodeFirstException();
//}

并将您的连接字符串更改为有效的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接