C# 通过Oracle和EF CodeFirst使用DbSet.Find
我在很多网站上,特别是在oracle论坛上读到,oracle不正式支持Entity Framework Code First或DbContext API 话虽如此,我也在很多地方读到人们成功地使用EF CodeFirst和Oracle部署了项目。我已经处理了很多问题,并一直在调整代码,以使其与SQL Server一起工作 一个似乎不起作用的函数是DbSet。找到作为参数传递键的位置,并准确地获取该记录 使用Find(如果我在同一个代码库上使用sql server,它就可以正常工作)会抛出一个异常,并出现以下错误: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,它就可以正常工作)会抛出一个异常
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上,而不是我的映射上
不同的扩展方法有不同的行为,所以要小心并注意这些映射