目前我有一个像这样的代码优先模型:
public class Ticket
{
public int SERIAL_NO { get; set; }
public DateTime SUBMIT_DATE { get; set; }
public string SYNOPSIS { get; set; }
public string DESCRIPTION { get; set; } // This is really an Oracle CLOB in the DB
}
在故障单控制器中,当用户单击“提交”时,我让它从数据库中选择最大SERIAL_NO,如下所示:
var lastSerial = db.Tickets.Select(x => x.SERIAL_NO).Max();
它抛出了这个错误:
ORA-00932: inconsistent datatypes: expected - got NCLOB
有人有什么想法吗?提前谢谢!
答案 0 :(得分:1)
ODP.NET的最新版本(在撰写本文时)是11.2.0.3
很遗憾,此版本尚不支持Code First(请参阅Oracle® Data Provider for .NET Developer's Guide以供参考)
支持实体框架4.1。但是,目前不支持Code First功能,即Entity Framework 4.1的一部分。
如果您愿意付款,DevArt claims that their provider supports Code-First。他们提供免费试用,以便您查看。
另一种选择是使用EDM Designer生成代码。
答案 1 :(得分:1)
查询的原始问题(获取ORA-00932错误)是因为当SELECT-list包含具有大(例如CLOB)数据类型的字段时,您不能使用DISTINCT。生成的SQL是否包含DISTINCT子句并返回DESCRIPTION字段?
它认为,CLOB可能包含GB的数据,只返回它的不同列可能意味着将每个列上的GB与GB或结果集中的所有其他列进行比较。
我猜其他聚合函数也会失败(最小值,最大值),以及按顺序使用CLOB列,原因相同。由于这是一个老问题,我给出的提示通常解决了大多数程序员的“头部刮擦”,我不会查找SQL参考中的相关位置。那些需要细节的人现在知道在哪里寻找(或寻找什么)。
答案 2 :(得分:1)
在列的映射中
.HasColumnType("CLOB")
答案 3 :(得分:0)
在你的模型上,添加属性[StringLength(100)]