C# 可空对象必须有一个值,Linq to SQL,MVC问题

C# 可空对象必须有一个值,Linq to SQL,MVC问题,c#,asp.net-mvc,entity-framework,linq-to-sql,C#,Asp.net Mvc,Entity Framework,Linq To Sql,我为一位离开公司的开发人员接管了一个项目,他对MVC不太熟悉。当运行程序时,我得到一个错误,即“可为null的对象必须有一个值” 表中的一个单元格由以下内容填充: <td>@SRA_Acquire.Models.Auth.Users.GetUserNameById((int)issue.UserID)</td> public static string GetUserNameById(int userId) { return GetUserById(userId

我为一位离开公司的开发人员接管了一个项目,他对MVC不太熟悉。当运行程序时,我得到一个错误,即“可为null的对象必须有一个值”

表中的一个单元格由以下内容填充:

<td>@SRA_Acquire.Models.Auth.Users.GetUserNameById((int)issue.UserID)</td>
public static string GetUserNameById(int userId)
{
    return GetUserById(userId).Name;
}

internal static UserProfile GetUserById(int userId)
{
    var db = new UsersContext();
    return db.UserProfiles.Where(c => c.UserId == userId).Single();
}
当单步执行代码时,userId是正确的,但我收到错误,指出当前上下文中不存在
c.userId

但是在my
AccountModels.cs中它显示

public class UsersContext : DbContext
{
    public UsersContext()
        : base("AuthContext")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<UsersInRoles> UsersInRoles { get; set; }
    public DbSet<Roles> Roles { get; set; }
}

[Table("UserProfile", Schema = "dbo")]
public class UserProfile 
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool IsLockedOut { get; set; }
}
public类用户上下文:DbContext
{
公共用户上下文()
:base(“AuthContext”)
{
}
公共数据库集用户配置文件{get;set;}
公共数据库集用户角色{get;set;}
公共数据库集角色{get;set;}
}
[表(“UserProfile”,Schema=“dbo”)]
公共类用户配置文件
{
[关键]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId{get;set;}
公共字符串用户名{get;set;}
公共字符串名称{get;set;}
公共字符串电子邮件{get;set;}
公共bool IsLockedOut{get;set;}
}

我错过了什么

尝试更新
c.UserId==UserId
条件,以避免此类错误:

c => c.UserId != null && c.UserId == userId

这看起来像是
LINQ to SQL
而不是
实体框架
?从错误消息看,似乎您没有用最新的更改更新DB,因为您的类中有
UserId
属性,但是一条错误消息显示上下文中没有
UserID
。结果集中确实隐藏了一个空值。通过下面添加的代码,我能够克服任何空值并填充文本,这些文本允许我继续循环遍历其余的数据公共静态字符串GetUserNameById(int?userId){if(userId!=null){string Name=GetUserById((int)userId).Name;return Name;}否则返回“用户在挂起之前未保存表单”;}