Собственно чтобы выучить Asp.net я стал читать книгу : Сандерсон С - ASP.NET MVC3 Framework с примерами на C# для профессионалов (третье издание) - 2012
В 5 главе, сначала мы эмулируем данные с помощью Moq:
Код C#
1
2
3
4
5
6
7
Mock<IProductsRepository> mock = new Mock<IProductsRepository>();
mock.Setup(m => m.Products).Returns(new List<Product> {
new Product { Name = "Football", Price = 25 },
new Product { Name = "Surf board", Price = 179 },
new Product { Name = "Running shoes", Price = 95 }
}.AsQueryable());
ninjectKernel.Bind<IProductsRepository>().ToConstant(mock.Object);
Далее в контроллере:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ProductController : Controller
{
private IProductsRepository repository;
public ProductController(IProductsRepository productRepository)
{
repository = productRepository;
}
public ViewResult List()
{
return View(repository.Products);
}
}
Сам List :
Код HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@model IEnumerable<SportsStore.Domain.Entities.Product>
@{
ViewBag.Title = "List";
}
<h2>List</h2>
<div>
@foreach(var p in Model)
{
<p>@p.Name </p>
<p>@p.Description</p>
<p>@p.Price.ToString("c")</p>
}
</div>
При этом все работает и выдает список , как и должен быть.
Теперь по книге мы создаем БД и добавляем в Web.config строку подключения:
Код HTML
1
2
3
4
5
<connectionStrings>
<add name="EFDbContext"
connectionString="Data Source=NUAN-ПК\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient" />
</connectionStrings>
Я создал проект который тупо к ней подключался чтобы менять\добавлять данные и т.п., оттуда и взял строку.
Далее: EFDbContext
Код C#
1
2
3
4
5
6
7
namespace SportsStore.Domain.Concrete
{
class EFDbContext
{
public DbSet<Product> Products { get; set; }
}
}
Сам Product:
Код C#
1
2
3
4
5
6
7
8
9
10
11
namespace SportsStore.Domain.Entities
{
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
Далее IProductsRepository и EFProductRepository
Код C#
1
2
3
4
5
6
7
namespace SportsStore.Domain.Abstract
{
public interface IProductsRepository
{
IQueryable<Product> Products { get; }
}
}
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace SportsStore.Domain.Concrete
{
public class EFProductRepository : IProductsRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products { get { return context.Products; } }
}
Вылетает с ошибкой:
HTML
Ссылка на объект не указывает на экземпляр объекта.
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
Сведения об исключении: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Ошибка источника:
Строка 8: <div>
Строка 9:
Строка 10: @foreach(var p in Model)
Строка 11: {
Строка 12: <p>@p.Name </p>
}
в строке 10 , при отладке почему то реализации = null
Перепробовал все что только можно, проверил подключение к базе, да она работает...
Могу скинуть полностью весь проект.
Помогите бился весь вечер, а научиться хочется.