以代码优先方式连接到数据库时出错 Entity Framework
Error while connecting to database in code-first Entity Framework
当上下文尝试使用 Entity Framework
的代码优先方法连接到数据库时,我收到以下错误消息
System.Data.Entity.DbContext' does not contain a definition for 'System' and no extension method 'System' accepting a first argument of type 'System.Data.Entity.DbContext' could be found (are you missing a using directive or an assembly reference?)
代码:
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 已经实现了 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>
当上下文尝试使用 Entity Framework
的代码优先方法连接到数据库时,我收到以下错误消息System.Data.Entity.DbContext' does not contain a definition for 'System' and no extension method 'System' accepting a first argument of type 'System.Data.Entity.DbContext' could be found (are you missing a using directive or an assembly reference?)
代码:
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 已经实现了 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>