实体框架4.1代码优先和Oracle CLOB

时间:2012-04-04 11:00:44

标签: c# oracle model-view-controller ef-code-first clob

目前我有一个像这样的代码优先模型:

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

有人有什么想法吗?提前谢谢!

4 个答案:

答案 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)]