在下面的代码中,item1的值为null,而item2不为null。在这种情况下,为什么Find方法无法正常工作?
context= new EFModel.InputContext();
context.Items.Add(new Item{ Id = 1 });
var item1 = context.Items.Find(1);
var item2 = context.Items.Local.SingleOrDefault(i => i.Id == 1);
修改
感谢@Maximc指向正确的方向。显然问题不在于密钥被设置为自动生成并且我分配了它。不知何故EF通过用用户指定的一个覆盖自动生成的Id来正确处理这种情况。问题是由于铸造不当造成的。我的Id属性属于long
类型,因此当我执行var item1 = context.Items.Find((long)1);
时,它就可以运行。
答案 0 :(得分:1)
Id是否具有[Key]属性?我想这将是你的问题。
编辑:
在阅读你的评论之后,你在这里说的是假的,你说Id是自动生成的,(StoreGeneratedPattern =“Identity”)但是在你使用的代码示例中:
context.Items.Add(new Item{ Id = 1 });
为自动生成的属性赋值会导致我认为的问题,无论如何你都应该这样做(Id = 1),只需使用:
context.Items.Add(new Item()); // Id将自动生成,因为它具有storeGeneratedPattern =“Identity”
然后尝试再次使用Find,我认为find只有在列表中只有1个项目时才会起作用,而如果你强制Id(1)并且那2个项目带有Id:1(我觉得很奇怪,认为应该有一个错误),然后FirstOrDefault仍然会工作! (因为它只会寻找第一个,然后返回它。你应该尝试,SingleOrDefault,在这里它将检查它是否找到了具有该Id的项目或者更多然后只有1,那么它也将返回null。
希望你现在可以解决它:)。