Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"
2015-09-18 12:26
411 查看
场景再现
我需要查询公司名称包含给定字符串的公司,于是我写了下面的测试小例子:
没想到运行的时候出现如下异常:
异常信息:“p__linq__1 : String truncation: max=0, len=2, value='测试'”。
异常截图:
在EF的映射关系中,我明明将Name一项设了最大长度是64:
那为什么查询的时候会说最大长度是0,而传入的参数长度是2,超过了这个0呢?
问题方案
我尝试把where部分的三元表达式前面去掉,直接使用contains判断是没问题的,于是我怀疑是三元表达式那个条件出问题了,而提示字符串最大长度是0,我想到可能是判断空字符那个条件有问题,所以我提前处理了一下,把程序改成如下,然后绕过了这个异常:
如果条件为null或者为空字符"",那么都改成空null,这么改完以后程序就工作了。
我查找了不少资料,介绍的方案都不是太有用,这里记录一下如果有遇到这个异常的同学可以试一下!
这里我也没用LinqPad去测试翻译的结果,这个难道是EF的一个bug?
我需要查询公司名称包含给定字符串的公司,于是我写了下面的测试小例子:
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(64).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?
相关文章推荐
- UITextView
- UILabel textAlignment in IOS6
- easyUI之message
- (原创)iOS中cell高度自适应方法UITableView设置
- UILabel自适应高度和自动换行
- 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
- [!] Unable to satisfy the following requirements:众里寻他千百度。
- ecshop 的transport.js 与jqueyr冲突
- 交互设计的基本方法(概述篇)
- VirtualBox安装增强工具时:Unable to install guest additions: unknown filesystem type 'iso9660'
- codeforces 566F. Clique in the Divisibility Graph dp
- easyui——datebox控件限制输入的日期
- java Map key value 取值的方法
- Message,MessageQueue,Looper,Handler,HandlerThread
- frame动画的实现(MessageQueue.IdleHandler)
- UITableView 知识更新A table view displays a list of items in a single column. UITableView is a subclas
- Java自动化测试之测试常用功能集集锦(UiAutomator、Selenium等)
- IOS UITableView 表格重用 下拉覆盖
- iOS 心得二 UICollectionView的基本使用
- UI一揽子计划 20 (豆瓣实战之图片缓存 、豆瓣实战之详情界面(自适应行高) 、豆瓣实战之登陆注销、刘新林分享之UIAlertController)