你调用的对象是空的。 MVC 和外键
Object reference not set to an instance of an object. MVC and Foreign Key
我什么都试过了,还是一无所获!我得到一个错误:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
可能是因为我用了两个相同的外键class?我不知道...请给我一盏灯
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();
Class 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; }
}
Class 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; }
}
usuarios 未创建,试试这个
while (rdr.Read())
{
var ate = new atendimento{
cartorios = new cartorios(),
usuarios=new usuarious()
}
....
我什么都试过了,还是一无所获!我得到一个错误:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
可能是因为我用了两个相同的外键class?我不知道...请给我一盏灯
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();
Class 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; }
}
Class 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; }
}
usuarios 未创建,试试这个
while (rdr.Read())
{
var ate = new atendimento{
cartorios = new cartorios(),
usuarios=new usuarious()
}
....