实体框架,空对象属性

本文关键字:对象 属性 框架 实体 | 更新日期: 2023-09-27 18:01:18

我有这段代码:

 Verification verif = dal.getAllVerifs().Where(v => v.interfa == inter).ToList().FirstOrDefault(v => v.nom == tache.nom);
 string name = verif.str.nomStruct;
 return RedirectToAction("Index", "Home", new {error = name });

抛出异常:

对象引用未设置为对象的实例。

我查了一下,我的Verification对象填充了每个属性,除了"str"属性(一个"结构"对象),它是空的。

这应该返回我的一个表的所有行:

public List<Verification> getAllVerifs()
{
  return bdd.verifications.ToList();
}

my model:

[Table("Structure")]
 public class Structure
 {
     [Key]
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     public int strucutureId { get; set; }
     [Required]
     public string nomStruct { get; set; }
     [Required]
     public bool isXsdExistant { get; set; }
 }
[Table("Taches_Verification")]
public class Verification
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int VerifId { get; set; }
    [Required]
    public string nom { get; set; }
    [Required]
    public string feuille { get; set; }
    [Required]
    public Interface interfa { get; set; }
    [Required]
    public Structure str { get; set; }
    [Required]
    public int numOrdre { get; set; }

}

我在数据库中查看,包含"结构"对象的表的主键被填充并且是ok的。

你遇到过这个问题吗?

感谢

k .

实体框架,空对象属性

把所有东西都写在一行里是很好的,直到有些东西不起作用。

把你的代码分成几个部分,然后调试。

var verif = dal.getAllVerifs()
var veriflimited = verif.Where(v => v.interfa == inter).ToList()
var singleVerif =veriflimited.FirstOrDefault(v => v.nom == tache.nom);
string name = verif.str.nomStruct;

如果你运行它,你很可能会发现你试图操作的对象中哪个是空的,然后更容易理解为什么。

而且你正在做的事情可以在许多步骤中一步完成。

这可能会显示相同的结果,并且运行得更快。

dal.getAllVerifs().FirstOrDefault(x => 
    v.interfa == inter 
    && v.nom == tache.nom
);

还有,你在.getAllVerifs()做什么?