Asp.net core mvc “FromSql”操作的结果中不存在所需的列

Asp.net core mvc “FromSql”操作的结果中不存在所需的列,asp.net-core-mvc,entity-framework-core,Asp.net Core Mvc,Entity Framework Core,我刚刚开始用EF7学习MVC6。我有一个存储过程,我想返回模型中的部分字段。如果我没有返回模型中的每个字段,我将得到所需的列“FirstName”在“FromSql”操作的结果中不存在 有没有一种方法可以让某些列不必输入,这样我就可以只返回模型中的一部分字段 型号: public class LoginViewModel { [Key] public int UserID { get; set; } [Required] [Display(Name = "Use

我刚刚开始用EF7学习MVC6。我有一个存储过程,我想返回模型中的部分字段。如果我没有返回模型中的每个字段,我将得到所需的列“FirstName”在“FromSql”操作的结果中不存在

有没有一种方法可以让某些列不必输入,这样我就可以只返回模型中的一部分字段

型号:

public class LoginViewModel
{
    [Key]
    public int UserID { get; set; }

    [Required]
    [Display(Name = "Username")]
    public string Username { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Protected ID")]
    public string ProtectedID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}
我的测试程序:

CREATE PROCEDURE [dbo].[aaa_TopXXUsersTest]
@NumToReturn int = 10
AS
BEGIN
    SET NOCOUNT ON;
    select top(@NumToReturn) UserID, LastName, Username,Password, ProtectedID from Users where Deleted = 0

END
最后,我的控制器代码:

public IActionResult Index()
{
    var user = _context.Set<LoginViewModel>().FromSql("dbo.aaa_TopXXUsersTest @NumToReturn = {0}", 20);

    return View(user);
}
如果我将模型的所有字段都包含在存储过程中,调用就可以正常工作,但我似乎不能只返回一个子集。有没有办法使某些字段不必填写?

使用了名为[NotMapped]的属性

NotMappeAttribute可以应用于我们不希望在数据库中为其创建相应列的实体类的属性


它需要从SP返回一个Id列

select top(@NumToReturn) 0 AS 'Id', UserID, LastName, Username,Password, ProtectedID 
  from Users 
 where Deleted = 0

或者将UserID从select和model更改为Id,这意味着结果集中不会返回“FirstName”列。
执行“从表中选择*”以解决此问题。

尝试删除此公共字符串FirstName{get;set;}。存储过程没有返回Firstname字段的值,但您正在尝试在loginViewModel类中接受此字符串Firstname变量中的值。

所述方法可能对您有好处。它允许使用EF7,而无需定义LoginViewModel之类的类。您将获得动态对象,您可以将其强制转换为包含存储过程返回的所有属性的对象。我希望简单的方法在这方面是可行的,但您的链接提供了我所需要的。感谢OlegDon,别忘了包括使用System.ComponentModel.DataAnnotations.Schema;我发现这个答案很有帮助,谢谢桑杰·卡蒂亚
select top(@NumToReturn) 0 AS 'Id', UserID, LastName, Username,Password, ProtectedID 
  from Users 
 where Deleted = 0