“FromSql”操作的结果中不存在所需的列
Posted
技术标签:
【中文标题】“FromSql”操作的结果中不存在所需的列【英文标题】:The required column was not present in the results of a 'FromSql' operation 【发布时间】:2016-04-21 19:02:02 【问题描述】:我刚刚开始使用 EF7 学习 MVC6。我有一个存储过程,我想返回模型中的一部分字段。如果我不返回模型中的每个字段,我会收到“‘FromSql’操作的结果中不存在所需的列‘FirstName’”。
有没有办法让一些列不需要,这样我就可以只返回模型中的一部分字段?
型号:
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);
如果我在我的存储过程中包含我模型的所有字段,调用工作正常,但我似乎不能只返回一个子集。有没有办法让某些字段不需要?
【问题讨论】:
here 描述的方式可能对你有好处。它允许使用 EF7 而无需定义像LoginViewModel
这样的类。您将获得带有存储过程返回的所有属性的 dynamic
对象(您可以将其转换为对象)。
我希望这个简单的方法是可行的,但你的链接提供了我需要的东西。谢谢奥列格
【参考方案1】:
使用[NotMapped]
属性和名字。
NotMapped
attribute 可以应用于我们不想在数据库中为其创建相应列的实体类的属性。
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;
[NotMapped]
public string FirstName get; set;
public string LastName get; set;
【讨论】:
不要忘记包含使用 System.ComponentModel.DataAnnotations.Schema;我发现这个答案很有帮助,谢谢 Sanjay Katiyar !!!!!! :)【参考方案2】:这意味着结果集中没有返回“FirstName”列。 执行“SELECT * FROM TABLE”来解决问题。
【讨论】:
【参考方案3】:它需要从 SP 返回一个 Id 列。
select top(@NumToReturn) 0 AS 'Id', UserID, LastName, Username,Password, ProtectedID
from Users
where Deleted = 0
或者从选择和模型中将UserID
更改为Id
【讨论】:
【参考方案4】:尝试删除这个公共字符串 FirstName get;放; 。您的存储过程未返回 Firstname 字段的值,但您试图在此字符串 Firstname 变量中的 loginViewModel 类中接受它。
【讨论】:
以上是关于“FromSql”操作的结果中不存在所需的列的主要内容,如果未能解决你的问题,请参考以下文章
使用 multer 文件输入的 axios 请求中不存在所需的请求部分“文件”