无法使用EF Core中的FromSql调用存储过程

时间:2017-02-28 05:26:54

标签: c# entity-framework-core

我正在尝试从EF Core调用存储过程,并且遇到了一个我不知道如何解决的错误。

类别:

public class PlayerOverview
{
    public string Player { get; set; }
    public int World { get; set; }
    public string Alliance { get; set; }
    public int Score { get; set; }
    public int Castles { get; set; }
    public int Cities { get; set; }
}

查询:

    _context.Set<PlayerOverview>()
            .FromSql($"CALL usp_player_overview('{player}')")
            .Select(pl => new
            {
                Player = pl.Player,
                World = pl.World,
                Alliance = pl.Alliance,
                Score = pl.Score,
                Castles = pl.Castles,
                Cities = pl.Cities
            });

例外:

  

抛出异常:'System.InvalidOperationException'   Microsoft.EntityFrameworkCore.dll

     

其他信息:无法为“PlayerOverview”创建DbSet   因为此类型未包含在上下文的模型中。

如何在上下文的模型中包含此类?如果我添加DbSet<PlayerOverview>,我会收到一个不同的异常,抱怨该集合缺少主键。

1 个答案:

答案 0 :(得分:3)

您需要添加DbSet并定义主键,因为没有名为Id或PalyerOverviewId的列,EF无法猜测哪个列是键。因此,使用[Key]属性或流畅的api(或者只是在结果和模型中添加一个唯一的PlayerOverviewId:

[Key]
public string Player { get; set; }

https://docs.microsoft.com/en-us/ef/core/modeling/keys