1

我在很多网站上,特别是在 oracle 论坛中读到,Oracle 不正式支持 Entity Framework Code First 或 DbContext API。

话虽如此,我还在很多地方读到人们使用 EF CodeFirst 和 Oracle 成功部署了项目。我遇到了很多问题,并且一直在调整代码以使其也可以与 SQL Server 一起使用。

一个似乎不起作用的函数是 DbSet.Find,您可以在其中将密钥作为参数传递并准确获取该记录。

使用 Find (如果我在同一个代码库上使用 sql server 效果很好)会引发异常并出现以下错误:

ORA-00942: table or view does not exist

我读了这个问题,他们提到了套管,这不是我的情况,所以对我来说没有解决办法。

奇怪的是 usingDbSet.SingleOrDefault(x => x.Id == SomeId)工作得很好,所以我很确定模式、表名和列的大小写是好的。

有人在使用 DbContext 时成功使用 Find 吗?

请注意:我没有使用 EDMX,也无法使用它,我们必须继续使用 CodeFirst。

谢谢。

4

1 回答 1

0

事实证明,在我的类中所做的数据注释确实存在问题,我在其中一个上有错字,但异常没有暴露引用的表或视图,所以找出的唯一方法是检查:

[TableName="MY_TABLE"]
public class MyClass
{

}

对应表名

CREATE TABLE MY_TABLE {

}

...对于在我的 DbContext 实现上具有 DbSet 的所有类。

DbSet.Find()现在,抛出异常而不是抛出异常的原因DbSet.SingleOrDefault()超出了我的知识范围,但我假设第一个遍历所有 POCO 类并尝试将它们映射到 DbContext 对象中,即使您正在处理的 DbSet 与另一方面,同一 DbContext 上的其他SingleOrDefault()人似乎只检查您在查询时实际要使用的那些表和对象的映射。

所以是的,我认为因为DbSet.SingleOrDefault()不是抛出和异常,而是DbSet.Find()问题出在 EF 上,而不是在我的映射上。

不同的扩展方法有不同的行为,所以要小心并注意这些映射!

于 2013-09-11T22:59:11.127 回答