Asp.net core mvc “FromSql”操作的结果中不存在所需的列
我刚刚开始用EF7学习MVC6。我有一个存储过程,我想返回模型中的部分字段。如果我没有返回模型中的每个字段,我将得到所需的列“FirstName”在“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
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