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

本文关键字:Oracle CLOB 代码 框架 实体 | 更新日期: 2023-09-27 18:29:54

目前我有一个代码优先的模型,如下所示:

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
}

在票证控制器中,当用户单击Submit时,我让它从数据库中选择最大SERIAL_NO,如下所示:

var lastSerial = db.Tickets.Select(x => x.SERIAL_NO).Max();

它抛出这个错误:

ORA-00932: inconsistent datatypes: expected - got NCLOB

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

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

ODP.NET的最新版本(在撰写本文时)是11.2.0.3

遗憾的是,此版本还不支持代码优先(请参阅Oracle®Data Provider for.NET Developer’s Guide以获取参考)

支持实体框架4.1。但是,作为实体框架4.1的一部分的代码优先功能目前不受支持。

如果你愿意付费,DevArt声称他们的提供商支持Code First。他们提供免费试用版,所以你可以查看。

另一种选择是使用EDM设计器生成代码。

查询的原始问题(得到ORA-00932错误)是因为当SELECT列表包含一个大数据类型(例如CLOB)的字段时,不能使用DISTINCT。您生成的SQL是否包含DISTINCT子句并返回DESCRIPTION字段?

它认为,CLOB可能包含GB的数据,只返回其中不同的列可能意味着将每一列的GB与结果集中的GB或所有其他列进行比较。

我想其他聚合函数也会失败(min,max),也会因为同样的原因按顺序使用CLOB列。由于这是一个老问题,而且我给出的提示通常会解决大多数程序员的"头痛"问题,因此我不会在SQL参考中查找相关位置。那些需要详细信息的人现在知道该去哪里寻找(或寻找什么)。

在列的映射中

.HasColumnType("CLOB")

在您的模型上,添加属性[StringLength(100)]