【问题标题】:Object reference not set to an instance of an object. MVC and Foreign Key你调用的对象是空的。 MVC 和外键
【发布时间】:2022-02-01 12:58:16
【问题描述】:

我什么都试过了,一无所获!我收到一个错误:

System.NullReferenceException: '对象引用未设置为对象的实例。'

可能是因为我使用了同一个类的两个外键?我不知道...请给我一个灯。

public List<atendimento> ListarAtendimentos()
{
        List<atendimento> lst = new List<atendimento>();

        using (SqlConnection con = new SqlConnection(cs))
        {
            con.Open();

            SqlCommand com = new SqlCommand("SELECT *, c.nome as nome_cartorio, a.status as status_atendimento, u.nome as nome_usuario FROM atendimento AS a INNER JOIN usuarios AS u ON u.id = a.id_usuario_cadastro INNER JOIN cartorios AS c ON a.id_cartorio = c.id", con);

            SqlDataReader rdr = com.ExecuteReader();

            while (rdr.Read())
            {
                atendimento ate = new atendimento();
                ate.cartorios = new cartorios();

                ate.id = Convert.ToInt32(rdr["id"]);
                ate.id_cartorio = Convert.ToInt32(rdr["id_cartorio"]);
                ate.cartorios.nome = rdr["nome_cartorio"].ToString();
                ate.titulo = rdr["titulo"].ToString();
                ate.descricao = rdr["descricao"].ToString();
                ate.data_abertura = Convert.ToDateTime(rdr["data_abertura"]);

                if (!rdr.IsDBNull(rdr.GetOrdinal("data_conclusao")))
                {
                    ate.data_conclusao = Convert.ToDateTime(rdr["data_conclusao"]);
                }

                ate.contato = rdr["contato"].ToString();
                ate.origem = rdr["origem"].ToString();
                ate.prioridade = rdr["prioridade"].ToString();
                ate.status = rdr["status_atendimento"].ToString();
                ate.usuarios.nome = rdr["nome_usuario"].ToString();
                ate.id_usuario_cadastro = Convert.ToInt32(rdr["id_usuario_cadastro"]);
                ate.id_usuario_atendimento = Convert.ToInt32(rdr["id_usuario_atendimento"]);

                lst.Add(ate);
            }

            return lst;
        }
}

问题出在下面一行:

ate.usuarios.nome = rdr["nome_usuario"].ToString();

第 1 类:

public partial class atendimento
{
        public atendimento()
        {
            this.lancamentos = new HashSet<lancamentos>();
        }

        public int id { get; set; }
        public int id_cartorio { get; set; }
        public string titulo { get; set; }
        public string descricao { get; set; }
        public Nullable<System.DateTime> data_abertura { get; set; }
        public Nullable<System.DateTime> data_conclusao { get; set; }
        public string contato { get; set; }
        public string origem { get; set; }
        public string prioridade { get; set; }
        public string status { get; set; }
        public int id_usuario_cadastro { get; set; }
        public int id_usuario_atendimento { get; set; }
        public virtual usuarios usuarios { get; set; }
        public virtual cartorios cartorios { get; set; }
        public virtual usuarios usuarios1 { get; set; }

        public virtual ICollection<lancamentos> lancamentos { get; set; }
}

第 2 类:

public partial class usuarios
{
        public usuarios()
        {
            this.anexos = new HashSet<anexos>();
            this.atendimento = new HashSet<atendimento>();
            this.atendimento1 = new HashSet<atendimento>();
            this.lancamentos = new HashSet<lancamentos>();
            this.lancamentos1 = new HashSet<lancamentos>();
        }

        public int id { get; set; }
        public string nome { get; set; }
        public string email { get; set; }
        public string senha { get; set; }
        public string status { get; set; }
        public string acesso { get; set; }
        public int id_setor { get; set; }

        public virtual ICollection<anexos> anexos { get; set; }
        public virtual ICollection<atendimento> atendimento { get; set; }
        public virtual ICollection<atendimento> atendimento1 { get; set; }
        public virtual ICollection<lancamentos> lancamentos { get; set; }
        public virtual ICollection<lancamentos> lancamentos1 { get; set; }
        public virtual setor setor { get; set; }
}

【问题讨论】:

  • 您不能在空值上使用ToString()。如果错误出现在指定的行上,请在尝试使用 ToString() 之前检查值是否为空(或 DBNull.Value)。
  • 我将您的答案与 Serge 的答案合并,并且成功了!哈哈哈哈哈...谢谢

标签: c# ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

usuarios 没有创建,试试这个

 while (rdr.Read())
{
var ate = new atendimento{
cartorios = new cartorios(),
usuarios=new usuarious()
}
....

【讨论】:

  • 我将您的答案与 user9938 答案合并,并且成功了!哈哈哈哈哈...谢谢
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 2013-05-27
  • 2013-07-22
相关资源
最近更新 更多