【问题标题】:Model First with DbContext, Fails to initialize new DataBase具有 DbContext 的模型优先,无法初始化新数据库
【发布时间】:2011-08-21 21:19:09
【问题描述】:

我放弃了。 我找到了这个: http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx 然后想,这很酷。 因此,我迅速重新设计了我的模型,以充分利用两者的优势。

但现在我的模型无法创建新数据库(或将表添加到现有数据库)。 我收到此错误:

如果在 Code First 模式下使用,使用 T4 模板生成的用于 Database First 和 Model First 开发的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 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 试试看能不能用,结果一模一样。

【问题讨论】:

    标签: .net entity-framework entity-framework-4.1 ef-code-first ef-model-first


    【解决方案1】:

    这是错误的连接字符串。使用模型优先/数据库优先 (EDMX) 后,您必须使用 Entity connection string 引用 .ssdl、.msl 和 .csdl 元数据文件。另请注意,从 EDMX 创建模型时,您必须在设计时创建数据库 = 您必须生成 SQL 脚本并执行它来创建数据库。

    【讨论】:

    • 实际上我通过更改 T4 模板找到了解决方法。不过还是谢谢,
    • @Łukasz Baran 愿意分享您的解决方案吗?
    • @JoelBeckham 我的问题是 throw new UnintentionalCodeFirstException();在实体类中。
    • 很好的答案 - 太糟糕了,错误消息不能再有帮助了。
    • 为什么 EF 需要一种特殊的连接字符串?
    【解决方案2】:

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

    【讨论】:

    • 这个简单的解决方案在所有其他解决方案都失败时对我有用。只需将模型 dll 项目中 app.config 中的连接字符串部分复制到 MVC 应用程序 web.config 中。
    【解决方案3】:
    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.
    

    【讨论】:

      【解决方案4】:

      删除或评论:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 2023-04-01
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-11
        相关资源
        最近更新 更多