我已经在很多网站上阅读过,特别是在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。
感谢。
答案 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而不是我的映射上。
不同的扩展方法有不同的行为,所以要小心并注意那些映射!