2015-09-06 6 views
0

Я пытаюсь опубликовать некоторые значения в моем mysql database with the entity framework. Я могу успешно подключиться к моей базе данных. Но после того, как я попытаюсь добавить некоторые значения, у меня есть ошибка NullReferenceException.Entity Framework DbSet throws 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

Смежные вопросы