web-dev-qa-db-ja.com

「FromSql」操作の結果に必要な列がありませんでした

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

ストアドプロシージャにモデルのすべてのフィールドを含めると、呼び出しは正常に機能しますが、サブセットだけを返すようには見えません。一部のフィールドを不要にする方法はありますか?

11
Scott Taylor

中古 [NotMapped]属性と名。

NotMappedattributeは、データベースに対応する列を作成しないエンティティクラスのプロパティに適用できます。

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; }
    }
9
sanjay kumar

これは、列 'FirstName'が結果セットで返されないことを意味します。この問題を解決するには、「SELECT * FROM TABLE」を実行してください。

1
snnpro

SPからId列を返す必要があります。

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

またはUserIDを選択とモデルからIdに変更します

0
user3876914