2016-05-30 54 views
5

我正在开发一个WPF应用程序与EF 6数据库的第一种方法,我有我的解决方案中的1个项目,如果我运行我的项目总是出现这个错误。实体框架:上下文正在代码第一模式下使用从EDMX文件生成的代码

上下文在代码优先模式下使用,代码是从数据库优先或模型优先开发的EDMX文件生成的。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用Database First或Model First,请确保实体框架连接字符串包含在启动项目的app.config或web.config中。如果您正在创建自己的DbConnection,那么请确保它是一个EntityConnection而不是其他类型的DbConnection,并且将其传递给采用DbConnection的基本DbContext构造函数之一。要了解更多有关代码首先,数据库优先和模型优先看到这里的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715

+0

您是否设置了连接字符串?如果没有看看这里:http://www.asp.net/mvc/overview/getting-started/introduction/creating-a-connection-string –

+0

不适合我。 – Munjani375

+0

多个上下文每个连接字符串或连接字符串的格式不正确 –

回答

1

你不应该使用生成的连接字符串,现在已包含在解决方案中的所有元数据文件。相反,尝试使用的app.configconnection string部分:

你可以做
"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;" 
3

一件事是...(如果是数据库第一)

打开的.edmx [图] - >右键 - >“更新从数据库模型“

然后看看会不会出现”添加“,”刷新“和”删除“选项卡。

如果不......可能你的连接被中断,VS的对话框会创建一个新的连接字符串,而不会出现。 =)

+0

如果这是第一次设计呢? –

+0

您在项目中使用.Edmx吗? –

0

我也遇到了这个完全相同的消息,但工作与一个web MVC项目。当我尝试从导入的模型中自动生成控制器时,会触发此消息。它似乎不工作,因为“这是从一个EDMX文件生成的”。

好消息是,如果我在“代码优先”而不是“EF Designer”的基础上生成模型,它将起作用。坏消息是,如果我想要自动生成控制器,我不能使用EF Designer。用这两种方法生成模型无关紧要。一旦模型生成,就可以以相同的方式使用它。

试图从您的项目中删除所有emdx对象,然后重新创建基于代码优先而不是EF Designer的模型。为我工作!

5

EF根据连接字符串中是否存在元数据部分进行假设。如果您收到此错误,您可以将元数据部分添加到配置文件中的连接字符串中。

E.g.如果你的连接字符串看起来是这样的:

<add name="MyModel" connectionString="data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 

前置metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;,使它看起来像这样:

<add name="MyModel" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
4

我的错误是使用标准的连接字符串中构造

(服务器=测试\测试; Database = DB; User Id = test_user; Password = test),

但实体框架需要不同的格式

(元数据= RES:// /DBModel.csdl|res:// /DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider连接字符串= "数据source = test \ test; initial catalog = DB; integrated security = True; MultipleActiveResultSets = True; App = EntityFramework "“”providerName =“”System.Data.EntityClient)

0

很晚但仍然有帮助。我陷入了类似的问题。发表了关于SO的问题,并找到了解决方案。你可以参考Connection String errors in C# Web Api。 我的情况是我在web.config中有两个连接字符串(你会知道为什么时去链接)。评论一个字符串会引发错误,同时评论另一个错误如下:

尝试创建类型为'AccountController'的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

我所做的是:我将我的第一个连接字符串命名为DefaultConnection,并在ApplicationDbContext类构造函数中给了这个DefaultConnection。现在我的AccountController使用这个连接字符串,所有其他控制器使用第二个连接字符串。 这解决了我的问题。

+0

你能发表一个这样的代码示例,我不确定你的意思。 –

+0

@HunterNelson我已经在我的回答中发布了我已经给出的参考。 –

相关问题