【问题标题】:No constructor with a connection string in Entity Framework datacontext实体框架数据上下文中没有带有连接字符串的构造函数
【发布时间】:2013-01-06 12:29:10
【问题描述】:

我在我的项目中使用Entity Framework 5.0。我在互联网上查看,我看到对于实体框架数据上下文,有另一个构造函数,它有一个用于连接字符串的字符串参数。

在我生成的data context 上,我没有这样的构造函数。我查看了基础DbContext,它有这样一个构造函数。

生成的代码是否错误?我从数据库生成了代码。会不会是这个原因?

原来我可以编辑代码生成模板文件来添加新的构造函数。现在我添加了新的构造函数。该文件是您的 edmx 模型下的 MyDataContext.tt 文件。在那里,您将 c# 代码与模板代码混合在一起。您可以从那里复制无参数构造函数并将其粘贴到下面。然后您可以更改它并向其添加一个字符串参数,并将该参数传递给 DbContext 构造函数,如下所示:base(myString)。

【问题讨论】:

  • 你能把代码贴出来让区别更清楚吗?
  • 是什么阻止您手动添加它?
  • 另外,DbContext 是“代码优先”。如果你有一个现有的数据库,典型的用法是“数据库优先”。
  • @flem 使用 EF5,甚至数据库首先为您生成 dbcontext 类。它使用 T4 文件
  • @scartag。我以为 db-first 使用了ObjectContext? EF5 有变化吗?

标签: .net entity-framework-5


【解决方案1】:

您可以根据需要添加一个。

检查生成的文件并添加一个重载的构造函数。

public YourContext(string connectionStr)
        : base(connectionStr)
    {


    }

最好在部分类中定义它,因为每一代都需要您每次手动添加它。

【讨论】:

  • 我相信我也可以编辑 .tt 文件,但我不知道这个文件是否也是自动生成的。
  • 测试并更改了 .tt 文件,在其中添加了一个新的构造函数。现在工作
  • @Alecu:我遇到了同样的问题,做了同样的事情:很高兴知道!
  • 我同意 Scartag,最好在部分类中定义它,因为每次生成代码时,您都会失去自定义。而且这样做比编辑 tt 文件更容易。
  • 注意:为了以编程方式设置 ConnectionString,请确保不要像 web.config 或 app.config 中的那样格式化它。那一个将包含“需要将其更改为单引号,否则您将收到最无用的错误消息。 stackoverflow.com/questions/6997035/… 。要么,要么使用 EntityConnectionStringBuilder。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
相关资源
最近更新 更多