none
ef报错 ----表达式树不能包含基本访问 RRS feed

  • 问题

  • ef报错   ----表达式树不能包含基本访问

    A类封装了EF的"Entities"对象

      protected virtual wkmEntities CreateContext
            {
                get
                {
                   
                        if (条件) //访问集团模块权限控制(0:支持,1:不支持)
                            return new
                                wkmEntities();
                        //返回集团数据连接实例
                      return new
                                wkmEntities(connString);
                    }
                }
            }

    B类继承A类,在B类里面使用A类的“Entities”对象

    如果只操作一次Entities对象中的数据表,可以正常使用;

    如:var abc = from bus in base.CreateContext.iness select bus;

    下面方式就报错:

    但是如何查询两个数据表,就报错“表达式树不能包含基本访问”

    如:

    var abc = from bus in base.CreateContext.iness
                              from log in base.CreateContext.n_user

    select new {bus.Guid,bus.Farther_Guid,bus.Name}

    2014年2月27日 7:28

答案

  • 你好:

    我简单测试了一下,发现了两个小问题,

    1. 你在get{}方法里面,如果这个用户满足权限的话,每次调用get方法都会返回一个新的DBContext对象, 因为你每次都执行了"return new wkmEntities();",这样的话如果你在同一个查询里面调用了两次,那么两次的查询会处在不同的DBContext中,查询结果是无法关联的,会出现运行时错误。

    2. 如果修正了第一个问题,每次返回同一个DBContext对象,会出现第二个问题,你在abc查询中的两次查询结果没有通过join连接,据我观测这在EF中是不支持的,编译时不会有问题,但是运行时会报错。如果通过join连接起来就不会出现错误。

    var abc = from bus in base.CreateContext.iness
                    join from log in base.CreateContext.n_user on bus.FIELD1 ==log.FIELD2
    
                    select new {bus.Guid,bus.Farther_Guid,bus.Name}
    


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年2月28日 8:48
    版主