2015-09-06 109 views
0

我嘗試將一些值發佈到我的mysql database with the entity framework。我能夠成功連接到我的數據庫。但是,在我嘗試添加一些值後,我得到了一個NullReferenceException錯誤。實體框架DbSet拋出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> 

最後,這是我的表DESCRIPTIO n在我的數據庫:

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

所以,如果我嘗試連接到我的數據庫,一切都還好。在我嘗試將實體添加到DbSet後,我會得到一個異常。

+0

哪條線具體拋出,什麼是堆棧跟蹤? – CodeCaster

+0

我在這裏有錯誤:「Test.Add(t);」。這裏是我的堆棧跟蹤:http://pastebin.com/B2yd64Ff – user3149497

+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(); 
} 
0

我相信這是因爲你是在承包商這樣做。在這個階段,我會假設Test屬性尚未初始化爲一個值。嘗試在初始化MysqlContext後的應用程序生命週期中稍後運行測試代碼。

+0

好吧,我已經創建了一個新的方法,在我將實體添加到數據庫中。但是,我仍然會像以前一樣犯下同樣的錯誤。 – user3149497

相關問題