先考虑如下这样的情况:
ORM直接将实体映射到数据库,在程序中,用IQueryable<ViewEntity>取出两个表的查询结果ViewEntity,此时这个ViewEntity在程序中只是一个引用,并没有数据,如果要修改这个ViewEntity肯定会出错,因为它只是数据的一个引用。
甚至这个时候,需要引用ViewEntity中的数据段来作为其它过程的输入都是不可以的,就会引发标题所示的异常:
try
{
string target=ModelEntity.一个string字段.subString(0);
}
catch(Exception)
{
}
每当遇到这样的时候,应当将ViewEntity转化为List(注意:转化为IEnumerable也不可以,IEnumerable也是引用,它引用的是EF中的数据,并不是指向数据库的连接),再修改。
下面两张图可以看出运行时IQueryable与List的区别:
(万恶心的水印,明明点了不打水印!)