“FromSql”操作的結果中不存在所需的列

asp.net-core-mvc entity-framework-core

我剛開始用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);
}

如果我在我的存儲過程中包含我的模型的所有字段,那麼調用工作正常,但我似乎無法返回一個子集。有沒有辦法讓一些字段不需要?

熱門答案

使用帶名字的[NotMapped]屬性。

NotMapped屬性可以應用於我們不希望在數據庫中創建相應列的實體類的屬性。

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; }
    }


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因