2013-09-11 53 views
1

我已经在很多网站阅读和在实体框架代码优先或API的DbContext不受Oracle官方支持Oracle论坛格外。使用DbSet.Find与甲骨文和EF CodeFirst

话虽这么说,我也读了很多的人已经开始使用EF CodeFirst与甲骨文成功地部署项目的地方。我一直在解决很多问题,并且一直在调整代码,以使其与SQL Server一起工作。似乎没有工作

一个功能是DbSet.Find,你传递密钥参数,准确地获取记录。

使用find(如果我使用SQL Server上的同一个代码库,其工作只是正常)抛出具有以下错误的异常:

ORA-00942: table or view does not exist 

我读this question它和他们提到外壳,这是不是我的情况如此没有为我修理。

奇怪的是,使用DbSet.SingleOrDefault(x => x.Id == SomeId)工作得很好,所以我敢肯定的模式,表名和列的外壳是好的。

使用的DbContext时,有没有人成功地用于查找?

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

谢谢。

回答

0

那么事实证明,确实有在我的课所做的数据说明一个问题,我有一个错字就在其中,但除了不公开引用的表或视图所以唯一的办法,找出了检查:

[TableName="MY_TABLE"] 
public class MyClass 
{ 

} 

对应表中的名称

CREATE TABLE MY_TABLE { 

} 

...我所有的类,有一个DbSet对我的DbContext执行。

现在,为什么DbSet.Find()被抛出异常和DbSet.SingleOrDefault()是不是超出了我的知识,但我认为第一遍历所有的POCO类,并尝试将其在的DbContext对象映射即使DbSet你正在工作的原因on与此DbContext上的其他人无关,另一方面,SingleOrDefault()看起来似乎只检查实际要在查询时使用的那些表和对象的映射。

所以,是的,我认为既然DbSet.SingleOrDefault()不抛异常,但DbSet.Find()是,这个问题是在EF,而不是我的映射。

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