Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"

时间:2022-09-21 18:42:59

场景再现

我需要查询公司名称包含给定字符串的公司,于是我写了下面的测试小例子:

var condition = "测试";
var query = from b in db.Companies
where (condition == null || condition == "") ? true : b.Name.Contains(condition)
orderby b.CompID
select new
{
CompID = b.CompID,
Name = b.Name
}; Console.WriteLine("All companies in the database:");
foreach (var item in query)
{
Console.WriteLine("ID:" + item.CompID + "\tName:" + item.Name);
}

没想到运行的时候出现如下异常:

异常信息:“p__linq__1 : String truncation: max=0, len=2, value='测试'”。

异常截图

Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"

在EF的映射关系中,我明明将Name一项设了最大长度是64:

public class CompanyMap : EntityTypeConfiguration<Company>
{
public CompanyMap()
{
ToTable("Companies");
HasKey(p => p.PKCompany);
Property(p => p.Name).IsRequired().HasMaxLength().HasColumnName("Company");
Property(p => p.IsChecked).IsRequired();
}
}

那为什么查询的时候会说最大长度是0,而传入的参数长度是2,超过了这个0呢?

问题方案

我尝试把where部分的三元表达式前面去掉,直接使用contains判断是没问题的,于是我怀疑是三元表达式那个条件出问题了,而提示字符串最大长度是0,我想到可能是判断空字符那个条件有问题,所以我提前处理了一下,把程序改成如下,然后绕过了这个异常:

var condition = "测试";

//...
condition = (condition == null || condition == "") ? null : condition;
var query = from b in db.Companies
where condition == null ? true : b.Name.Contains(condition)
orderby b.CompID
select new
{
CompID = b.CompID,
Name = b.Name
};

如果条件为null或者为空字符"",那么都改成空null,这么改完以后程序就工作了。

我查找了不少资料,介绍的方案都不是太有用,这里记录一下如果有遇到这个异常的同学可以试一下!

这里我也没用LinqPad去测试翻译的结果,这个难道是EF的一个bug?

Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"的更多相关文章

  1. Data Developer Center &gt&semi; Learn &gt&semi; Entity Framework &gt&semi; Get Started &gt&semi; Loading Related Entities

    Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entitie ...

  2. &lbrack;翻译&rsqb; - &lt&semi;Entity Framework&gt&semi; - 直接执行数据库命令

    原文:[翻译] - <Entity Framework> - 直接执行数据库命令 纯属学习上的记录, 非专业翻译, 如有错误欢迎指正! 原文地址: http://msdn.microsof ...

  3. 关于MySql entity framework 6 执行like查询问题解决方案

    原文:关于MySql entity framework 6 执行like查询问题解决方案 本人不善于言辞,直接开门见山 环境:EF6.0.0.0+MySQL Server5.6+MySqlConnec ...

  4. 在Entity Framework 中执行T-sql语句

    从Entity Framework  4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery<T> 和 ExecuteStoreC ...

  5. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  6. &lbrack;转&rsqb;在Entity Framework中使用LINQ语句分页

    本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm ...

  7. Entity Framework——记录执行的命令信息

    有两种方法可以记录执行的SQl语句: 使用DbContext.Database.Log属性 实现IDbCommandInterceptor接口 一 使用DbContext.Database.Log属性 ...

  8. Entity Framework中执行Sql语句

           如果想在EF框架中执行Sql语句,其实很简单,EF里面已经提供了相关的方法(此处使用的EF为EF4.1版本).        EF中提供了两个方法,一个是执行查询的Sql语句SqlQue ...

  9. Entity Framework EF6使用 MySql创建数据库异常解决办法

    EF6使用MySQL数据库时,第一次创建数据库出现“Specified key was too long; max key length is 767 bytes”错误,解决办法请见以下连接. htt ...

随机推荐

  1. Codeforces &num;380 Subordinates&lpar;贪心 构造&rpar;

    从前往后扫,找到一出现次数为0的数,从后面找一个出现不为0的数转化而来.设置两指针l, r来处理. #include<cstdio> #include<iostream> #i ...

  2. jQuery1&period;6源码分析系列

    原文地址:http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html jQuery源码分析(版本1.6.1) 目录 00 前言开光 0 ...

  3. &lbrack;0x00 用Python讲解数据结构与算法&rsqb; 概览

    自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...

  4. 想直接用Windows API开发程序,你真的应该知道这些!

    1,Windows数据类型. 2,Windows数据类型命名规律. 3,匈牙利表示法.

  5. VIM中的正则表达式及替换命令

    VIM中的正则表达式及替换命令 一.使用正则表达式的命令 使用正则表达式的命令最常见的就是 / (搜索)命令.其格式如下: /正则表达式 另一个很有用的命令就是 :s(替换)命令,将第一个//之间的正 ...

  6. ora-14550问题解决

    select a.sid, a.serial#, a.paddr, 'alter system kill session ''' || a.sid || ',' || a.serial# || ''' ...

  7. 【转】Java通过IText导出word和pdf

    原帖地址:http://blog.csdn.net/zwx19921215/article/details/34439851 最近做的项目中需要用到把Highcharts图表导出word和pdf的功能 ...

  8. CSS中的尺寸单位

    绝对单位 px: Pixel 像素 pt: Points 磅 pc: Picas 派卡 in: Inches 英寸 mm: Millimeter 毫米 cm: Centimeter 厘米 q: Qua ...

  9. 一个可扩展的深度学习框架的Python实现(仿keras接口)

    一个可扩展的深度学习框架的Python实现(仿keras接口) 动机 keras是一种非常优秀的深度学习框架,其具有较好的易用性,可扩展性.keras的接口设计非常优雅,使用起来非常方便.在这里,我将 ...

  10. Linux下用户和raid练习题

    1. 公司一开发人员申请对服务器10天的oldboy普通用户权限,如何操作? useradd oldboy passwd oldboy usermod -e `date -d "10day& ...