Помогите новичку :) (MVC 5 - Структура интернет-магазина)

ASP.NET
  1. 9 месяцев(а)
    Добавлено 9 месяцев(а) Alexandr_Erohin

    Помогите новичку)
    В уроке Интернет магазин на ASP.NET MVC 5 - Структура интернет-магазина, все прекрасно объяснено на примере одной сущности "Game".
    А как реализовать работу с двумя сущностями?
    Т.е. например пусть категория игры будет у нас идет отдельной сущностью и надо вывести зная ее ID, название.

    CREATE TABLE [dbo].[Categories] (
    [Id] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR(100) NOT NULL,
     CONSTRAINT [PK_Categorie] PRIMARY KEY CLUSTERED ([Id] ASC),
    );
    
    CREATE TABLE [dbo].[Games] (
    	[Id] INT IDENTITY (1, 1) NOT NULL ,
    	[Name] NVARCHAR(100) NOT NULL,
    	[Description] NVARCHAR(500) NOT NULL,
    	[CategoryID] INT NOT NULL,
    	[Price] DECIMAL(16, 2) NOT NULL,
        CONSTRAINT [PK_Game] PRIMARY KEY CLUSTERED ([Id] ASC),
        CONSTRAINT [FK_Game_Category] FOREIGN KEY ([CategoryID]) REFERENCES [dbo].[Categories] ([Id]),
    );

    public class Game { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public string Category { get; set; } public decimal Price { get; set; } }

    Так же создали отдельно класс для категории:

    public class Categorie { public int Id { get; set; }// ID public string Name { get; set; }// название }
    Соответственно, так же в файле интерфейса меняла:

    public interface IGameRepository
     {
            IEnumerable<Category> Categories{ get; }
            IEnumerable<Game> Games { get; }
        }

    В класса контекста прописала строку:

     public DbSet<Category> Categories{ get; set; }

    А в EFGameRepository.cs :

    public class EFGameRepository : IGameRepository
        {
            EFDbContext context = new EFDbContext();
    
            public IEnumerable<Game> Games
            {
                get { return context.Games; }
            }
            public IEnumerable<Category> Categories
            {
                get { return context.Categories; }
            }
    }

    Далее в уроке были следующие коды для контроллера:

    public class GameController : Controller
        {
            private IGameRepository repository;
            public GameController(IGameRepository repo)
            {
                repository = repo;
            }
    
            public ViewResult List()
            {
                return View(repository.Games);
            }
    	}

    И представления:

    @using GameStore.Domain.Entities
    @model IEnumerable<Game>
    
    @{
        ViewBag.Title = "Товары";
    }
    
    @foreach (var p in @Model)
    {
        <div>
            <h3>@p.Name</h3>
            <p>@p.Description</p>
            <h4>@p.Price.ToString("# руб")</h4>
        </div>
    }

    Я, по наивности думала, что это будет выглядеть так:<h3>@p.CategoryID.Name</h3>, что бы получить нужное название категории данной игры. Но, конечно, это не сработало.
    Помогите пожалуйста, нубу :)

  2. Alexandr_Erohin

    May 10 Администратор

    В контроллере:

    public class GameController : Controller
    {
            private IGameRepository repository;
            public GameController(IGameRepository repo)
            {
                repository = repo;
            }
    
            public ViewResult List()
            {
                return View(repository);
            }
    }

    Во вьюхе:

    @using GameStore.Domain.Entities
    @model IGameRepository 
    
    @{
        ViewBag.Title = "Товары";
    }
    
    @foreach (var p in @Model.Games)
    {
        <div>
            <h3>@p.Name</h3>
            <p>@p.Description</p>
            <h4>@p.Price.ToString("# руб")</h4>
        </div>
    }
    
    @foreach (var c in @Model.Categories)
    {
        <div>
            <h3>@c.Name</h3>
        </div>
    }

или зарегистрируйтесь чтобы ответить