Нужен способ извлечения данных из второй таблицы с использованием C # Linq в Entity Framework Core - PullRequest
0 голосов
/ 30 марта 2019

Я не могу вернуть дочерние данные из второй таблицы, связанной с покупкой внешнего ключа с первой таблицей.

У меня есть следующие таблицы, которые были созданы с использованием подхода Entity Framework Core Code:

 public class BoardGame
 {
    public int id { get; set; }
    public double price { get; set; }
    public List<BoardGameTitle> BoardGameTitle{get;set;}
 }

 public class BoardGameTitle
 {
     public int id { get; set; }
     public string Name { get; set; }
     public string Description { get; set; }

     public int languageId { get; set; }

     public int BoardGameId{get;set;}
     public BoardGame BoardGame{get;set;}
  }

 public class TableFlipDB :DbContext{
        public TableFlipDB (DbContextOptions<TableFlipDB> options)
        :base(options)
        {}

        public DbSet<BoardGame> BoardGame{get;set;}
        public DbSet<BoardGameTitle> BoardGameTitle{get;set;}

        protected override void OnModelCreating(ModelBuilder modelBuilder){
            modelBuilder.Entity<BoardGame>().HasMany(bg=>bg.BoardGameTitle).WithOne(bg=>bg.BoardGame);
            //modelBuilder.Entity<BoardGameTitle>().HasOne(BoardGameTitle=>BoardGameTitle.BoardGame).WithMany(BoardGameTitle=>BoardGameTitle.BoardGameTitle);
        }
    }

вторая таблица BoardGameTitle содержит внешний ключ к следующей таблице BoardGame через свойство BoardGameId,

Когда я получаю список настольных игр, я не могу получить связанные данные из второй таблицы свойства BoardGameTitle свойство возвращает ноль

мой контроллер

 public ActionResult<List<BoardGame>> GetAll()
 {
   return TableFlipDB.BoardGame.ToList();
 }

Ожидаемый результат:

[
  {
    "id": 1,
    "price": 100,
    "boardGameTitle": [
      {
        "id": 1,
        "name": "b1",
        "description": "b1",
        "languageId": 1,
        "boardGameId": 1,
        "boardGame": {
          "id": 1,
          "price": 100,
          "boardGameTitle": []
        }
      }
    ]
  },
  {
    "id": 2,
    "price": 200,
    "boardGameTitle": [
      {
        "id": 2,
        "name": "b2",
        "description": "b2",
        "languageId": 1,
        "boardGameId": 2,
        "boardGame": {
          "id": 2,
          "price": 200,
          "boardGameTitle": [
            {
              "id": 3,
              "name": "b22",
              "description": "b22",
              "languageId": 2,
              "boardGameId": 2
            }
          ]
        }
      },
      {
        "id": 3,
        "name": "b22",
        "description": "b22",
        "languageId": 2,
        "boardGameId": 2,
        "boardGame": {
          "id": 2,
          "price": 200,
          "boardGameTitle": [
            {
              "id": 2,
              "name": "b2",
              "description": "b2",
              "languageId": 1,
              "boardGameId": 2
            }
          ]
        }
      }
    ]
  }
]

Но результат, который я получил

[ { "id": 1, "price": 100, "boardGameTitle": null }, { "id": 2, "price": 200, "boardGameTitle": null } ]

1 Ответ

0 голосов
/ 02 апреля 2019

Я нашел решение, так как @Elyas Esna в разделе комментариев сказал, что мне нужно изменить оператор возврата контроллера с return TableFlipDB.BoardGame.ToList(); на return TableFlipDB.BoardGame.Include(p=>p.BoardGameTitle).ToList();

...