使用查询类型和可选属性

时间:2018-10-19 09:53:09

标签: c# .net entity-framework

我正在使用最新版本的EF Core,我已经弄清楚了如何创建查询类型,以便可以通过创建自定义模型并将其添加到dbContext OnModelCreating方法中来将存储过程的结果获取到dbContext中。 / p>

我基本上想对两个不同的存储过程使用相同的模型。这是一个问题的例子。

public class Program
{
    public string Name { get; set; }
    public int? Permission { get; set; }
}

所以我有两个不同名称的存储过程。一个叫“ usp_GetProgram”,另一个叫“ usp_GetProgramWithPermission”。一个SP仅返回名称,而另一个SP同时返回名称和权限。

我正在尝试利用相同的自定义查询类型。第一个SP失败,因为我必须返回两个值。我收到以下异常...

 "The required column 'Permission' was not present in the results of a 'FromSql' operation."

我从上面的异常消息中可以了解到这里发生了什么。我想知道是否可以做一些事情来确保“权限”字段不在结果中而被忽略。我试图使其变为可为空,这是行不通的。

我有一个解决方案,我有2 *查询类型。每个SP一个。所以..

public class Program
{
    public string Name { get; set; }
}

然后

public class ProgramWithPermission
{
    public string Name { get; set; }
    public int? Permission { get; set; }
}

只是事情变得混乱了,我想尝试更好地重用事物。我也不能更改SP。我想知道我是否缺少某些东西,是否可以指出正确的方向。还是我们只是为结果中的每一个细微差别而准备了不同的自定义查询类型。

*回应以下评论* 我做这样的事

  return await _context
                .Query<Entities.Custom.ProgramWithPermission>()
                .FromSql("EXECUTE usp_GetProgramWithoutPermission @UserID", parameters)
                .ToListAsync();

所以说上面的SP仅返回名称,而我试图将其塞入ProgramWithPermission。那就是为什么我得到错误。它不允许这样做,因为即使此时没有人,它也需要权限。

0 个答案:

没有答案