第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

查詢數(shù)據(jù)庫,列值為空?

查詢數(shù)據(jù)庫,列值為空?

C#
莫回?zé)o 2023-07-09 10:22:29
我有一個(gè)用戶登錄然后它調(diào)用控制器。我在用戶表中搜索電子郵件匹配并將其保存到用戶變量中。但是當(dāng)我嘗試檢查它是否是管理員用戶時(shí),權(quán)限列為空,它是空引用。為什么用戶不首先或默認(rèn)提取所有列數(shù)據(jù),我檢查數(shù)據(jù)庫并且permissionId在那里,但是當(dāng)我檢查所述行的值時(shí)將其拉為空。我真的很清楚,這是我的第一個(gè)更大的項(xiàng)目,也是我第一次似乎無法在谷歌上找到答案。這是實(shí)體:用戶:public class User    {        public int    UserId        { get; set; }        [Column(TypeName = "VARCHAR(100)")]        [StringLength(100)]        [Required]        public string FirstName     { get; set; }        [Column(TypeName = "VARCHAR(100)")]        [StringLength(100)]        [Required]        public string LastName      { get; set; }        [Column(TypeName = "VARCHAR(100)")]        [StringLength(250)]        [Required]        public string Email         { get; set; }        [Required]        public string Password      { get; set; }        [Required]        public string UserName      { get; set; }        //The user can have many posts         public List<Post> Post      { get; set; }        public virtual Permissions Permissions { get; set; }    }權(quán)限:public class Permissions    {        public int PermissionsID {get; set;}        [Required]        public bool admin { get; set; }        [Required]        public bool StandUser { get; set; }        //Many Users can have a permission, this makes the foreign key for the Post Table.        public List<User> User { get; set; }    }這是登錄后控制器:[HttpPost]        public IActionResult Login(LoginViewModel loginViewModel)        {            //We're grabbing the plain text password so we can hash it later.             loginViewModel.plainTextPassword = loginViewModel.user.Password;            //Searching for the users emaill address and gathering the user information.             User userInfo = _context.Users.FirstOrDefault(x => x.Email == loginViewModel.user.Email);我希望 userInfo 的所有行都不為空,以便稍后我可以檢查用戶是否是管理員。
查看完整描述

1 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

通常,延遲加載會在幕后處理此問題,但如果您沒有啟用或可用(EF Core 2.1 之前的版本),您將留下 #null 引用。


選項(xiàng):


1) 預(yù)加載權(quán)限.Include(x => x.Permissions)。


正如法比奧上面評論的那樣,這應(yīng)該可以解決您眼前的問題。急切加載的考慮因素是您必須顯式包含您想要引用的所有內(nèi)容,這可能意味著加載比您需要的更多的數(shù)據(jù)。


2)用于Select獲取您需要的數(shù)據(jù)。


通過利用,Select您可以消除對急切加載或延遲加載命中的擔(dān)憂,并生成經(jīng)過優(yōu)化以僅返回您關(guān)心的數(shù)據(jù)的 SQL。如果您想要根據(jù)數(shù)據(jù)狀態(tài)執(zhí)行某些邏輯,您可以使用匿名類型來表示數(shù)據(jù)。在其他情況下,您想要將數(shù)據(jù)返回到視圖,請使用 Select (或 Automapper 的ProjectTo)來填充視圖模型。


例如:


[HttpPost]

public IActionResult Login(LoginViewModel loginViewModel)

{

    loginViewModel.plainTextPassword = loginViewModel.user.Password;


    var userInfo = _context.Users.Where(x => x.Email == loginViewModel.user.Email)

        .Select(x => new 

        {

            x.UserId,

            x.FirstName,

            x.LastName,

            x.Password,

            IsAdmin = x.Permissions.Admin

        }).SingleOrDefault();


    if (userInfo == null)

    {

        ViewBag.Error = "Sorry, but we couldn't log you in.";

        return View();

    }

    else if (Hashing.Confirm(loginViewModel.plainTextPassword, userInfo.Password, Supported_Ha.SHA256))

    {

        HttpContext.Session.SetString("UserFirstName", userInfo.FirstName);

        HttpContext.Session.SetString("UserLastName", userInfo.LastName);

        HttpContext.Session.SetInt32("UserUserId", userInfo.UserId);



        HttpContext.Session.SetString("IsAdmin", userInfo.IsAdmin.ToString());


        ViewBag.IsAdmin = userInfo.IsAdmin.ToString();

        ViewBag.SessionUserName = userInfo.FirstName;

        return RedirectToAction("Index");

    }

    ViewBag.Error = "Sorry, but we couldn't log you in.";

    return View("Index");

}

主題演講:我們使用 Select 只檢索我們需要的用戶列(名稱、ID、密碼哈希)以及權(quán)限引用中的“admin”標(biāo)志。它被加載到一個(gè)臨時(shí)容器中,我們可以在此方法中引用它。每當(dāng)您需要單行而不是/時(shí),最好使用Single/ ,因?yàn)榭梢云帘我馔獾闹貜?fù)數(shù)據(jù)場景。IMO /切勿在沒有子句的情況下使用,以確保結(jié)果一致。SingleOrDefaultFirstFirstOrDefaultFirstFirstOrDefaultOrderBy


查看完整回答
反對 回復(fù) 2023-07-09
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號