namespace DataAccess.Concrete.EntityFramework
{
public class UserDal : EfEntityRepositoryBase<User, LogisticContext>, IUserDal
{
public List<Role> GetRoles(User user)
{
using var context = new LogisticContext();
return context.UserRoles
.Include(x => x.Role)
.Where(x => x.UserId == user.Id)
.Select(x => new Role { Id = x.RoleId, Name = x.Role.Name })
.ToList();
}
}
}
我正在嘗試登錄但已經登錄,role并且userRole表沒有任何資料,因此它會引發空參考例外。我能做些什么來解決這個問題?

uj5u.com熱心網友回復:
問題出在.DefaultIfEmpty(null)
如果序列為空,則回傳指定序列的元素或單例集合中的指定值。
退貨
IEnumerable<TSource>
如果源為空,則包含 defaultValue 的 IEnumerable;否則,來源。
由于查詢已具體化并且沒有從資料庫中查詢任何記錄,.DefaultIfEmpty(null)因此它會回傳結果: new Enumerable<UserRole> { null }.
因此,您將NullReferenceException在訪問RoleIdandRole時得到xis null。
解決方案
您必須洗掉.DefaultIfEmpty(null)部分。
return context.UserRoles
.Include(x => x.Role)
.Where(x => x.UserId == user.Id)
.Select(x => new Role { Id = x.RoleId, Name = x.Role.Name })
.ToList();
設想:
由于UserRole和Role表都沒有從查詢中回傳記錄,因此您將得到new List<UserRoles> {}一個空串列/陣列的結果。
uj5u.com熱心網友回復:
嘗試拆分 linq 查詢并讓 ToList 呼叫與空檢查分開。
uj5u.com熱心網友回復:
當您在 UserRole 中為角色定義 Nullable 屬性并在 UserRole 中查找用戶但未找到角色時會出現此問題,您應該檢查角色屬性不為空
return context.UserRoles
.Include(x => x.Role)
.Where(x => x.UserId == user.Id && x.Role != null)
.Select(x => new Role { Id = x.RoleId, Name = x.Role.Name })
.ToList();
uj5u.com熱心網友回復:
namespace DataAccess.Concrete.EntityFramework
{
public class UserDal : EfEntityRepositoryBase<User, LogisticContext>, IUserDal
{
public List<Role> GetRoles(User user)
{
using var context = new LogisticContext();
return context.UserRoles
.Include(x => x.Role)
.Where(x => x.UserId == user.Id)
.Select(x => new Role { Id = x.RoleId, Name = x.Role != null ? x.Role.Name : "Not available" })
.ToList();
}
}
}
基本上我在這里所做的,我應用了三元條件運算子,以防您的角色與 null 不同,我們將讀取資料,否則我會將名稱設定為某個默認值“不可用”,但您可以將其設定為您想要的任何值到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455895.html
上一篇:Vue復選框子級和父級
