将DbSet.Find与Oracle和EF Code First一起使用

时间:2013-09-11 02:45:02

标签: c# oracle entity-framework odp.net odac

我已经在很多网站上阅读过,特别是在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

我读了this question关于它的问题,他们提到了套管,这不是我的情况,因此无法解决我的问题。

奇怪的是,使用DbSet.SingleOrDefault(x => x.Id == SomeId)的工作正常,所以我非常确定模式,表名和列的大小合适。

有没有人在使用DbContext时成功使用了Find?

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

[TableName="MY_TABLE"]
public class MyClass
{

}

对应于表名

CREATE TABLE MY_TABLE {

}

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

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

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

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