Insight数据库自动接口&;映射多对多

本文关键字:映射 amp 数据库 接口 Insight | 更新日期: 2023-09-27 18:19:25

假设我有以下表格:

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)]

但在呼叫连接时。As()抛出InvalidOperationException:"Sequence不包含匹配的元素。"

Insight数据库自动接口&;映射多对多

你说得对,但当接口返回List而不是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