EF连接字符串错误

时间:2013-12-16 06:25:32

标签: c# entity-framework web-config

我在 web.config 文件中的连接字符串:

<connectionStrings>
   <add name="DefaultConnection" 
        providerName="System.Data.SqlClient" 
        connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-EFcodefirst-20131213155231;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-EFcodefirst-20131213155231.mdf" />
</connectionStrings>

我的上下文文件

namespace EFcodefirst.Models
{
    public class SampleContext: DbContext
    {    
        public DbSet<EFcodefirst.Models.Customer> Customers { get; set; }        
    }
}

我的控制器

SampleContext dbContext = new SampleContext();
var customerList = dbContext.Customers.ToList();
return View(customerList);

这是错误

  

从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。检查内部异常以获取详细信息,并确保连接字符串正确。

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试在ASP.NET成员资格使用的同一文件中创建数据库,并且您的计算机上没有安装SQLEXPRESS(否则,Entity Framework将在您的SQLEXPRESS中创建具有YourNamespace.SampleContext名称的数据库数据库)。因此,只需添加另一个指向另一个数据库文件的连接字符串:

<connectionStrings>
   <add name="SampleContext"
        providerName="System.Data.SqlClient" 
        connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Sample;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Sample.mdf" />
   <add name="DefaultConnection" 
        providerName="System.Data.SqlClient" 
        connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-EFcodefirst-20131213155231;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-EFcodefirst-20131213155231.mdf" />
</connectionStrings>

注意:如果您不希望连接字符串与上下文类具有相同的名称,则可以为基本上下文类的构造函数提供连接字符串名称:

public class SampleContext: DbContext
{    
    public SampleContext()
       : base("AnotherConnectionStringName")
    {
    }

    public DbSet<EFcodefirst.Models.Customer> Customers { get; set; }        
}

答案 1 :(得分:-1)

修改dbcontext文件:

public class SampleContext: DbContext
{    
    public SampleContext()
       : base("DefaultConnection")
    {
    }

    public DbSet<EFcodefirst.Models.Customer> Customers { get; set; }        
}