Insight.Database Auto Interface & Mapping Многие ко многим

Предполагая, что у меня есть следующие таблицы:

CREATE TABLE Game
(
  GameId INT,
  Name VARCHAR(50)
)

CREATE TABLE UserGameJoin
(
  GameId INT,
  UserId INT
)

CREATE TABLE User
(
  UserId INT,
  Username VARCHAR(50)
)

И следующие классы:

public class Game
{
  public int GameId {get;set;}
  public string Name {get;set;}
  public List<User> Users {get;set;}
}

public class User
{
  public int UserId {get;set;}
  public string Username {get;set;}
}

Как бы я пошел о отображении результатов этой хранимой процедуры

CREATE PROC GetGamesAndUsers
AS
SELECT *
FROM Game

SELECT GameId, u.*
FROM Game g
INNER JOIN UserGameJoin j ON j.GameId = g.GameId
INNER JOIN User u ON u.UserId = j.UserId

к реализации автоматического интерфейса?

public interface IGameLibrary
{
  List<Game> GetGamesAndUsers();
}

Я поиграл с атрибутом Recordset, добавив

[Recordset(1, typeof(User), Id = "GameId", IsChild = true)]

Но при вызове connection.As() генерируется исключение InvalidOperationException: "Последовательность не содержит соответствующих элементов".

1 ответ

Решение

Вы правильно поняли, но похоже, что есть ошибка, когда интерфейс возвращает список вместо IList и вы указываете поле Id.

Если вы вернете вместо этого IList, вызов должен работать.

public interface IGameLibrary 
{
  [Recordset(1, typeof(User), Id = "GameId", IsChild = true)]
  IList<Game> GetGamesAndUsers();
}

Я открыл это как проблему #136, и это будет исправлено в v4.2.7.

https://github.com/jonwagner/Insight.Database/issues/136

Другие вопросы по тегам