连接到代码优先实体框架中的数据库时出错

本文关键字:数据库 出错 框架 实体 代码 连接 | 更新日期: 2023-09-27 17:59:01

当上下文试图使用实体框架的代码优先方法连接到数据库时,我收到以下错误消息

System.Data.Entity.DbContext"不包含"System"的定义,也找不到接受类型为"System.Data.Eentity.DbContext"的第一个参数的扩展方法"System"(是否缺少using指令或程序集引用?)

代码:

public class Context : DbContext, IDisposable
{
    public Context() : base("EcommConnectionString")
    {
    }
    public List<Entities.RLI_State> States { get; set; }
    public List<Entities.RLI_Product> Products { get; set; }
    public List<Entities.RLI_StateProduct_List> StateProductList { get; set; }
}

这就是我在web.config:中定义的连接字符串的方式

<appSettings>
    <add key="EcommConnectionString" 
         value="data source=localhost;initial catalog=tempdb;integrated security=SSPI" />
</appSettings>

连接到代码优先实体框架中的数据库时出错

这里有几个问题。

首先,DbContext已经imlpements IDisposable,所以您不需要它。把它放在那里不是问题,但它是多余的。

其次,您的List<>属性应该使用DbSet<>

public class Context : DbContext
{
    public Context() : base("EcommConnectionString")
    {
    }
    public DbSet<Entities.RLI_State> States { get; set; }
    public DbSet<Entities.RLI_Product> Products { get; set; }
    public DbSet<Entities.RLI_StateProduct_List> StateProductList { get; set; }
}

最后,正如@marc_s所提到的,web.config中的连接字符串应该在<connectionStrings>元素中,而不是在<appSettings>:中

<connectionStrings>
    <add name="EcommConnectionString" 
         connectionString="data source=localhost;initial catalog=tempdb;integrated security=SSPI" />
</connectionStrings>