gpt4 book ai didi

entity-framework - EF 5.0 DbSet Find 方法返回 null

转载 作者:行者123 更新时间:2023-12-02 20:34:11 25 4
gpt4 key购买 nike

在下面的代码中,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 指出了正确的方向。显然,问题不在于 key 被设置为自动生成并且我分配了它。 EF 通过使用用户指定的 Id 覆盖自动生成的 Id 来正确处理这种情况。问题是由于类型转换不当造成的。我的 Id 属性的类型为 long,因此当我执行 var item1 = context.Items.Find((long)1); 时,它就会起作用。

最佳答案

Id 是否具有属性 [Key] ?我认为这将是你的问题。

编辑:

阅读完您的评论后,您在这里所说的内容是错误的,您说 Id 是自动生成的(StoreGeneratePattern="Identity"),但在您使用的代码示例中:

context.Items.Add(new Item{ Id = 1 });

我认为为自动生成的属性分配一个值会导致问题,无论如何你不应该这样做(Id = 1),只需使用:

context.Items.Add(new Item());//Id 将自动生成,因为它具有 storeGeneratePattern="Identity"

然后再次尝试使用Find,我认为find仅在列表中只有1个项目时才有效,而如果您强制使用Id(1)并且有2个Id为1的项目(我觉得很奇怪,认为应该有错误),那么 FirstOrDefault 仍然会工作! (因为它只会查找第一个,然后返回它。您应该尝试 SingleOrDefault,这里它将检查是否找到具有该 Id 的项目或不止 1 个项目,然后它也会返回 null。

希望你现在就能解决这个问题:)。

关于entity-framework - EF 5.0 DbSet Find 方法返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com