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.