实体框架,null对象属性

时间:2015-07-07 10:18:06

标签: c# entity-framework

我有这段代码:

 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"属性(a"结构"对象),为空。

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

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

我的模特:

[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; }

}

我查看了数据库,这是包含&#34;结构的表的主键&#34;对象已填满且没问题。

你有没有遇到过这个问题?

由于

ķ。

1 个答案:

答案 0 :(得分:2)

将所有内容写在一行中是很好的,直到某些东西不起作用。

将代码分解成碎片并进行调试。

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;

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

此外,您正在做的事情可以在很多步骤中完成。

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

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

另外,你在.getAllVerifs()做了什么?