我使用实体框架和ASP。NET MVC 4构建应用程序
我的解决方案分为两个项目;
一个类库,其中包括我的数据模型(.edmx)文件和一些自定义接口 引用上面类库的“容器”MVC项目
我的问题是,当我试图使用'MyEntites' DbContext时,我得到以下错误:
中找不到名为“MyEntities”的连接字符串 应用程序配置文件。
我猜这个问题与连接字符串位于类库的app.config而不是MVC项目的事实有关。
有人有什么建议吗?
我使用实体框架和ASP。NET MVC 4构建应用程序
我的解决方案分为两个项目;
一个类库,其中包括我的数据模型(.edmx)文件和一些自定义接口 引用上面类库的“容器”MVC项目
我的问题是,当我试图使用'MyEntites' DbContext时,我得到以下错误:
中找不到名为“MyEntities”的连接字符串 应用程序配置文件。
我猜这个问题与连接字符串位于类库的app.config而不是MVC项目的事实有关。
有人有什么建议吗?
当前回答
在根web中添加一个连接字符串。'container' MVC项目的配置文件引用类库如下:
<connectionStrings>
<add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />
</connectionStrings>
如果你不想使用“MyEntities”作为连接名,那么按照你的愿望更改它,但在你的MyEntities DbContext类中做以下更改:
MyEntities: DbContext
{
public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
}
这个错误的原因是,如果我们没有在DbContext的派生类中指定连接字符串或连接字符串的名称(在您的情况下是MyEntities),那么DbContext将自动在根web中搜索连接字符串。配置文件,其名称与派生类名称相同(在您的情况下,它是My Entities)。
其他回答
你可以把连接字符串传递给EntityFramework,然后继续你的生活:
public partial class UtilityContext : DbContext
{
static UtilityContext()
{
Database.SetInitializer<UtilityContext>(null);
}
public UtilityContext()
: base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
{
}
// DbSet, OnModelCreating, etc...
}
@RyanMann在上面的回答下评论道:
将连接字符串存储在一个配置文件中,然后通过<connectionString configSource="../ProjectDir/SharedConnections "在其他项目中引用它们。配置" / >
这是一个很棒的建议!
它还可以在App.config和Web之间共享连接字符串。配置文件!
任何想要遵循这个建议的人,都应该去看看这个SO答案。 它有一个关于在解决方案中的多个项目之间共享连接字符串的非常棒的分步指南。
唯一需要注意的是,configSource必须存在于同一目录或子目录中。上面的链接解释了如何使用“添加为链接”来解决这个问题。
您的解决方案中是否使用了多个项目?
因为如果你是,你必须检查的web配置是与de .edmx文件在同一个项目中的配置
确保你已经在启动项目的ROOT web.config中放置了连接字符串。
I know I'm kinda stating the obvious here, but it happened to me too - though I already HAD the connection string in my MVC project's Web.Config (the .edmx file was placed at a different, class library project) and I couldn't figure out why I keep getting an exception... Long story short, I copied the connection string to the Views\Web.Config by mistake, in a strange combination of tiredness and not-scrolling-to-the-bottom-of-the-solution-explorer scenario. Yeah, these things happen to veteran developers as well :)
这也可能导致在调用代码中没有引用足够的dll引用。一个小小的笨拙的hack可以挽救你的一天。
我遵循DB First方法,并在DAL类库项目中创建了EDMX文件,这是对BAL类库的引用,而BAL类库又由WCF服务引用。
由于我在BAL中得到这个错误,我尝试了上面提到的方法从DAL项目的App.config复制配置细节,但没有解决。最终,在一个朋友的建议下,我只是添加了一个虚拟的EDMX文件到WCF项目(与相关的DB Connectivity等),所以它导入了所有必要的东西,然后我只是删除了EDMX文件,它只是摆脱了一个干净的构建问题。