Insight.Database自动界面&映射多对多

时间:2014-08-25 20:28:24

标签: c# insight.database

假设我有以下表格:

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:&#34; Sequence不包含匹配的元素。&#34;

1 个答案:

答案 0 :(得分:2)

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