实体框架DbSet抛出NullReferenceException

时间:2015-09-06 10:27:06

标签: c# mysql entity-framework

我尝试将一些值发布到mysql database with the entity framework。我能够成功连接到我的数据库。但是,在我尝试添加一些值后,我发现了NullReferenceException错误。

这是我的代码:

public class MysqlContext: DbContext
{
    public DbSet<Test> Test { get; set; }

    public MysqlContext(): base("MysqlDefaultConnection")
    {
        Database.Connection.Open();
        var t = new Test { Name = "test", Id = 0 };
        Test.Add(t);
        SaveChanges();
    }
}

[Table("test")]
public class Test
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

这是我的实体框架的配置:

<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

<connectionStrings>
<add name="MysqlDefaultConnection" connectionString="server=localhost;user id=dev;password=****;database=****" providerName="MySql.Data.MySqlClient" />

<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>

最后这是我的数据库中的表格描述:

CREATE TABLE `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

所以,如果我尝试连接到我的数据库,一切都很好。在我尝试将我的实体添加到DbSet后,我将获得异常。

2 个答案:

答案 0 :(得分:0)

如果您不在DbContext构造函数中尝试此代码,它的行为方式相同吗?

public class MysqlContext: DbContext
{
    public DbSet<Test> Test { get; set; }

    public MysqlContext(): base("MysqlDefaultConnection")
    {

    }
}

[Table("test")]
public class Test
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

public void Main()
{
  var myContext = new MysqlContext();
  var t = new Test { Name = "test", Id = 0 };    
  myContext.Set<Test>.Add(t);
  myContext.SaveChanges();
}

答案 1 :(得分:0)

我相信这是因为你在承包商那里做这件事。在这个阶段,我会假设Test属性尚未初始化为值。尝试在MysqlContext初始化后的应用程序生命周期中运行测试代码。