实体框架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
有人有什么想法吗?提前感谢!
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)]