【问题标题】:Entity Framework, devArt, and Oracle VarChar params实体框架、devArt 和 Oracle VarChar 参数
【发布时间】:2011-08-17 21:25:25
【问题描述】:

您好:我正在使用 devArt 的 Oracle Connect 与 Entity Framework 4.1 POCO 和 Oracle 一起工作。

我对某些 Oracle 列类型为 Char(固定长度)的查询有疑问。生成的 SQL 查询中使用的参数被格式化为 VarChar 而不是 Char,这导致我的查询返回零行。有没有办法强制EntityFramework/DevArt填充参数?

这是一个问题示例(查询用户名)。此代码应该返回行,但它没有。

string aUserName = "Test"; var query = from u in users where u.UserName == aUserName select u;

如果我将第一行代码更改为:

string aUserName = "Test".PadRight(20);

然后它就可以工作了(Oracle 列是 Char(20))。我不想做填充(我不必使用 SQL Server)。我可以进行一些配置更改吗?连接字符串开关?我的 POCO 上的一个属性?

【问题讨论】:

  • 列是CHAR有什么原因吗?是否可以简单地将其更改为 varchar2?
  • 希望我能做到,但这是一个遗留数据库,涉及大量代码和多个安装(我们是 ISV)。所以我必须使用我们已有的模式。

标签: c# oracle entity-framework devart


【解决方案1】:

您有两个选择:
1. 执行您所做的操作并填充用户名字符串变量。
2.删除空字符 - 修剪用户名字段。

其他选项:

string aUserName = "Test";
var query = users.select(x => string.Join(string.Empty, x.UserName).TrimEnd()).
                  where(x => x==aUserName)

(这将返回用户名而不是整个用户对象)

希望这会有所帮助。

【讨论】:

  • 我将您的答案标记为答案,因为 Padright 最终成为我的情况的最佳解决方案。 (我必须同时支持 SQL Server 和 Oracle)。我确实找到了另一种有利于仅 Oracle 开发的解决方案:您可以将 [Column] 属性应用于列并将“CHAR”作为类型名命名参数传递。这将使一切都在 Oracle 中正常工作,但 SQL Server 会出现运行时异常。
【解决方案2】:

我们已在论坛上回复您here
如果您在提供的解决方案中遇到任何问题,请通知我们。

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2023-03-11
    • 2013-01-05
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多