我的连接字符串的名称是否应与数据库中提供的表名相同

时间:2017-06-14 18:16:16

标签: c# sql-server entity-framework

虽然我尝试搜索很多帖子但我没有得到解决方案。 实体框架中的问题

我的连接字符串的名称是否应该与DB中提供的表名相同?

因为当我给连接字符串名称作为表名时,我没有发现任何错误,但是当我将DBContext作为我的连接字符串名称时,我得到了这个例外。

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code

Additional information: The connection string 'ProductContext' in the application's configuration file does not contain the required providerName attribute."

这是我的一段代码 型号:

public class Product
    {
        public  int id { get; set; }
        public  string Name { get; set; }
        public int Quantity { get; set; }
        public DateTime EntryDate { get; set; }
    }

ProductContext

 public class ProductContext: System.Data.Entity.DbContext
    {
        public DbSet<Product> Products { get; set; }
        public ProductContext() : base("ProductContext") { }
    }

控制器:

public class ProductController : Controller
    {
        ProductContext db = new ProductContext();
        // GET: Product
        public ActionResult Index()
        {
            var product = db.Products.ToList();
            return View(product);
        }

的web.config:

<connectionStrings>
    <add name="ProductContext" connectionString="Data Source=SHUTTHEFCUKUP;Initial Catalog=EntityFrameWork;Integrated Security=True;providerName=System.Data.EntityClient" />
  </connectionStrings>

数据库表:

select * from Product
columns:
id,
name,
quantity,
date_entry

任何人都可以帮助我,因为我是新的实体框架。我错过了一些东西。

2 个答案:

答案 0 :(得分:1)

更改连接字符串,如下所示,

<connectionStrings>
    <add 
        name="ProductContext" 
        connectionString="Data Source=SHUTTHEFCUKUP;Initial Catalog=EntityFrameWork;Integrated Security=True;"
        providerName="System.Data.SqlClient" />
</connectionStrings>

providerNameadd节点中的一个属性,它不属于connectionString

答案 1 :(得分:0)

当您的连接字符串以上下文命名时,它将自动用于该上下文。在这种情况下,您必须设置providerName属性,以便Entity Framework知道要使用哪个数据库连接提供程序。

您还应该在Web.config文件中为Entity Framework提供相同名称的提供程序设置。这取决于您用于数据库的连接器,并应记录在其文档中。

在这种情况下,将providerName="System.Data.EntityClient"添加到字符串中就足够了。