我一直在用SQl Compact 4.0尝试代码第一个EF项目。 当我尝试运行项目时,我收到一条错误“在数据库'master'中创建数据库权限被拒绝。”。
我搜索了一些帮助,并在回复一些博客时尝试识别正在使用的连接字符串。令我惊讶的是
context.Database.Connection.ConnectionString "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" string
即使我的web.config文件包含以下部分......
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
有谁知道为什么EF坚持创建与SQLEXPRESS而不是SQL Compact的连接? 我无法在解决方案的任何地方找到SQLEXPRESS的参考资料。
答案 0 :(得分:3)
而不是使用以下内容将您的连接名称传递给DBContext
public YourContext() : base("DefaultConnection")
{
}
使用名称指令
public YourContext() : base("name=DefaultConnection")
{
}
这将告诉EF将参数用作连接。
另外,在web.config的connectionStrings部分顶部添加“clear”可以解决继承问题。
答案 1 :(得分:2)
在web.Config中查找<entityFramework>
部分,它应该有你的默认连接工厂:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/>
</parameters>
</defaultConnectionFactory>
</entityFramework>
如果您正在执行代码优先项目,您还可以更改默认构造函数以使用其他连接字符串:
public YourContext() : base("name=DefaultConnection")
{
}
答案 2 :(得分:1)
此博客文章介绍了如何执行此操作...
http://blogs.msdn.com/b/davidobando/archive/2013/03/13/10339621.aspx