3

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

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

4 回答 4

1

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

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

我猜其他聚合函数也会失败(最小值,最大值),以及出于同样的原因按顺序使用 CLOB 列。由于这是一个老问题,而且我给出的提示通常可以解决大多数编码人员的“头疼”问题,因此我不会在 SQL 参考中查找相关点。那些需要详细信息的人现在知道在哪里寻找(或寻找什么)。

于 2013-01-09T18:32:46.470 回答
1

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

遗憾的是,此版本尚不支持 Code First(请参阅Oracle® Data Provider for .NET Developer's Guide以获取参考)

支持实体框架 4.1。但是,目前不支持作为 Entity Framework 4.1 一部分的 Code First 功能。

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

另一种选择是使用 EDM Designer 生成代码。

于 2012-04-04T12:54:17.770 回答
1

在列的映射中

.HasColumnType("CLOB")
于 2019-08-15T14:02:09.923 回答
0

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

于 2016-03-31T14:09:32.307 回答