实体框架代码First + MySQL ... NullReferenceException

时间:2011-08-25 14:37:48

标签: c# mysql entity-framework asp.net-4.0

我需要处理异地MySQL数据库中的几个表中的数据,我们对此有限,并决定将其用作获取一些EFCF体验的机会。无论我做什么,我都无法从MySQL数据库中获取任何数据。使用MySQL工作台我可以确认连接细节是否正确,并可以访问所需的表。

下面是为了保护服务器等而编辑的当前配置

网络配置

<connectionStrings>
    <clear />
    <add name="foo" connectionString="Server=111.222.333.444; Database=foo; Uid=foouser; Pwd=bar;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<system.data>
    <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient" />
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
</system.data>

的DbContext

public class DbContext : System.Data.Entity.DbContext
{
    public DbContext()
        : base("foo")
    {

    }

    public DbSet<Model.resource_request> resource_requests { get; set; }
}

资源请求

[Table("resource_requests")]
public class resource_request
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    public Int64 id { get; set; }

    public string CustomerName { get; set; }
    public string ContactEmail { get; set; }
}

使用我收到的即时窗口快速检查上下文状态:

ctx.Database.Connection.Open()
Expression has been evaluated and has no value
ctx.Database.Connection
{MySql.Data.MySqlClient.MySqlConnection}
    [MySql.Data.MySqlClient.MySqlConnection]: {MySql.Data.MySqlClient.MySqlConnection}
    base {System.ComponentModel.Component}: {MySql.Data.MySqlClient.MySqlConnection}
    ConnectionString: "server=111.222.333.444;database=foo;User Id=foouser"
    ConnectionTimeout: 15
    Database: "foo"
    DataSource: "111.222.333.444"
    ServerVersion: "5.1.43-community"
    State: Open

但是执行查询会导致

ctx.resource_requests.Count();

Exception details

我确信我一定会错过一些明显的东西,但它是什么?

非常感谢

3 个答案:

答案 0 :(得分:3)

您是否尝试过命名连接字符串DbContext?它的名称应该与类名匹配。

像这样:

<add name="DbContext" connectionString="Server=111.222.333.444; Database=foo; Uid=foouser; Pwd=bar;" providerName="MySql.Data.MySqlClient" />

还没有尝试使用MySql,但是在没有正确命名连接字符串的情况下,我在过去使用Sql Server时遇到了问题。

祝你好运!

答案 1 :(得分:0)

也许这可以帮助Entity Framework throws NullReferenceException with .NET 3.5

另一件需要注意的事情是mysql小写列和表名,因此在定义模型时,您需要将Properties映射到字段名称。Custom Database Schema Mapping

答案 2 :(得分:0)

我在这里找到了答案:MySQL with Entity Framework - what am I doing wrong?

问题在于我的项目中缺少对MySql.Data.Entity的引用。添加后,异常就消失了。