Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"
场景再现
我需要查询公司名称包含给定字符串的公司,于是我写了下面的测试小例子:
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='测试'”。
异常截图:
在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='测试'"的更多相关文章
- Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entities
Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entitie ...
- [翻译] - <Entity Framework> - 直接执行数据库命令
原文:[翻译] - <Entity Framework> - 直接执行数据库命令 纯属学习上的记录, 非专业翻译, 如有错误欢迎指正! 原文地址: http://msdn.microsof ...
- 关于MySql entity framework 6 执行like查询问题解决方案
原文:关于MySql entity framework 6 执行like查询问题解决方案 本人不善于言辞,直接开门见山 环境:EF6.0.0.0+MySQL Server5.6+MySqlConnec ...
- 在Entity Framework 中执行T-sql语句
从Entity Framework 4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery<T> 和 ExecuteStoreC ...
- Entity Framework Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- [转]在Entity Framework中使用LINQ语句分页
本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm ...
- Entity Framework——记录执行的命令信息
有两种方法可以记录执行的SQl语句: 使用DbContext.Database.Log属性 实现IDbCommandInterceptor接口 一 使用DbContext.Database.Log属性 ...
- Entity Framework中执行Sql语句
如果想在EF框架中执行Sql语句,其实很简单,EF里面已经提供了相关的方法(此处使用的EF为EF4.1版本). EF中提供了两个方法,一个是执行查询的Sql语句SqlQue ...
- Entity Framework EF6使用 MySql创建数据库异常解决办法
EF6使用MySQL数据库时,第一次创建数据库出现“Specified key was too long; max key length is 767 bytes”错误,解决办法请见以下连接. htt ...
随机推荐
- 用DirectX实现魔方(三)视角变换及缩放(附源码)
在本系列第一篇介绍过鼠标按键的功能,如下. 左键拖拽 - 旋转魔方 右键拖拽 - 变换视角 滚轮 - 缩放魔方 今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现M ...
- Redis教程(十四):内存优化介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/142.html 一.特殊编码: 自从Redis 2.2之后,很多数据类型都 ...
- Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1 Python 3_x 新特性1 python3.4新特性1 python3.5新特性1 值得关注的新特性1 ...
- C#并行编程-线程同步原语
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- 好友录v1.2.7_Build(7790)
<好友录>是使用.net Framework4.0+sqlite开发的,属于WingKu(谷毅科技)系列软件之一.它是一款外观时尚.美观,操作简单.易用,功能强大的个人通讯信息管理软件.它 ...
- [ASP.net MVC] 将HTML转成PDF档案,使用iTextSharp套件的XMLWorkerHelper (附上解决显示中文问题)
原文:[ASP.net MVC] 将HTML转成PDF档案,使用iTextSharp套件的XMLWorkerHelper (附上解决显示中文问题) [ASP.net MVC] 将HTML转成PDF档案 ...
- Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...
- 去除IE6浏览器下获得焦点的元素的虚线框的两个小办法
[1]onfocus = "this.blur()"//得到焦点时,失去焦点 e.g. <a href="#" onfocus = "this. ...
- python类定义与c#的一些区别
c#中可以定义一个空类,但是python中定义空类需要加pass class EmptyClass(object): pass python的lei是多继承 python子类继承了基类,如果子类也 ...
- Lua 学习笔记(四)语句与控制结构
一.赋值与多重赋值 赋值的基本含义是改变一个变量的值或table中字段的值.Lua中允许“多重赋值”,也就是同时为多个值赋予多个变量,每个变量之间以逗号分隔. Lua会先对等号右边 ...