C# 通过Oracle和EF CodeFirst使用DbSet.Find

C# 通过Oracle和EF CodeFirst使用DbSet.Find,c#,oracle,entity-framework,odp.net,odac,C#,Oracle,Entity Framework,Odp.net,Odac,我在很多网站上,特别是在oracle论坛上读到,oracle不正式支持Entity Framework Code First或DbContext API 话虽如此,我也在很多地方读到人们成功地使用EF CodeFirst和Oracle部署了项目。我已经处理了很多问题,并一直在调整代码,以使其与SQL Server一起工作 一个似乎不起作用的函数是DbSet。找到作为参数传递键的位置,并准确地获取该记录 使用Find(如果我在同一个代码库上使用sql server,它就可以正常工作)会抛出一个异常

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

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

一个似乎不起作用的函数是DbSet。找到作为参数传递键的位置,并准确地获取该记录

使用Find(如果我在同一个代码库上使用sql server,它就可以正常工作)会抛出一个异常,并出现以下错误:

ORA-00942: table or view does not exist
我读到了,他们提到了外壳,这不是我的情况,所以没有解决我

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

在使用DbContext时,是否有人成功使用了Find

请注意:我没有使用EDMX,也不能使用它,我们必须先继续使用CodeFirst


谢谢

事实证明,我的类中的数据注释确实存在问题,我在其中一个类上有一个输入错误,但异常没有公开引用的表或视图,因此唯一的方法是检查:

[TableName="MY_TABLE"]
public class MyClass
{

}
对应于表名

CREATE TABLE MY_TABLE {

}
…对于在DbContext实现中具有DbSet的所有类

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

所以,是的,我假设既然
DbSet.SingleOrDefault()
没有抛出异常,而
DbSet.Find()
是异常,那么问题就出在EF上,而不是我的映射上

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