3

在下面的代码中 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 覆盖 aut 生成的 Id 来正确处理这种情况。问题是由于铸造不当造成的。我的 Id 属性是类型的long,所以当我这样做时, var item1 = context.Items.Find((long)1);它就会起作用。

4

1 回答 1

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。

希望你现在可以解决它:)。

于 2013-02-13T00:09:58.140 回答