【问题标题】:Entity Framework Code First + MySQL... NullReferenceException实体框架代码优先 + MySQL... NullReferenceException
【发布时间】:2011-11-03 18:31:52
【问题描述】:

我需要在一个非现场 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();

我确定我一定遗漏了一些明显的东西,但它是什么?

非常感谢

【问题讨论】:

  • 您找到解决方案了吗?
  • 这是很久以前的事了,所以从记忆中我认为它与适配器的数据类型转换中的错误有关。最后,我想我下载了源代码并进行了必要的调整。

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


【解决方案1】:

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

像这样:

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

还没有尝试过使用 MySql,但我在过去使用 Sql Server 时遇到问题,因为连接字符串命名不正确。

最好的问候!

【讨论】:

  • 六小时下来。有人能告诉我这在 MySQL 网站上的记录在哪里吗?谢谢 Guilherme Melo,你得到了我的 +1
【解决方案2】:

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

另外需要注意的是mysql小写的列名和表名,所以你应该在定义模型时将属性映射到字段名。Custom Database Schema Mapping

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 2017-09-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2012-05-31
      相关资源
      最近更新 更多