2014-10-18 3 views
0

Я играю с ASP.net, используя первый подход кода для создания и использования базы данных.Объект, возвращающий null после создания объекта

Используя приведенный ниже код, я получаю исключение типа 'System.NullReferenceException' Ссылка на объект не установлена ​​в экземпляр объекта (см. Код для конкретной строки).

Когда я перехожу через приложение, переменная, о которой идет речь, «p» имеет значение {Code_first_database.Models.Product}, а не null.

Я просмотрел What is a NullReferenceException and how do I fix it? и What does “Object reference not set to an instance of an object” mean?, но я все еще не могу видеть проблему.

Любая помощь очень ценится.

HomeController.cs

namespace Code_first_database.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      Models.Product p = new Models.Product("Soft331", "Book"); 
      using (var db = new Models.ProductDB()) 
      { 
       db.products.Add(p); // **EXCEPTION THROWN HERE** 
       db.SaveChanges(); 
       ViewBag.Message = "The number of products so far is " + 
        db.products.Count().ToString(); 
      } 

      return View(); 
     } 
    } 
} 

Product.cs

namespace Code_first_database.Models 
{ 
    public class Product 
    { 
     public int Id { get; set; } 
     public string Product_Code { get; set; } 
     public string Product_Name { get; set; } 
     public float Price { get; set; } 
     public int Stock { get; set; } 

     public Product(string p_code, string p_name) 
     { 
      Product_Code = p_code; 
      Product_Name = p_name; 
     } 
    } 
} 

ProductDB.cs

namespace Code_first_database.Models 
{ 
    public class ProductDB : DbContext 
    { 
     public DbSet<Product> products; 

     public ProductDB() : base("DefaultConnection") 
     { 

     } 
    } 
} 

Благодарности Tony

+0

ли ваш 'db' переменной на самом деле имеют непустое' 'продуктов собственности? –

+0

Я так не думаю, и я не добавил его. Как я могу проверить? – tonyedwardspz

ответ

4

Если я не ошибаюсь, вам нужно использовать свойства вместо переменных в Entity Framework. Изменение

public DbSet<Product> products; 

в

public DbSet<Product> products { get; set; } 
+0

Я добавил код для ProductDB.cs к вопросу. Ive просто попытался добавить 'products = new DbSet ();' в конструктор, но он недоступен из-за его уровня защиты. – tonyedwardspz

+0

@tonyedwardspz Я не думаю, что вам нужно его инициализировать, сначала попробуйте изменить переменную на свойство – dotnetom

+0

Фантастика. Геттер и сеттер отсортировали его. Спасибо за помощь :) – tonyedwardspz

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