首页 > 代码库 > EF作为DAL层遇到的问题

EF作为DAL层遇到的问题

今天在部署一个经典三层的项目的时候,用到了EntityFramework,碰到几个问题:

在用EntityFramework将数据库导入到DAL层后,在BL层引用该DAL后,在测试项目的时候,想要查询一个表的结果集,但是发现没有平常熟悉的智能提示,我习惯用ToList(),但是这次只能提示没有出现,我以为是因为dll引用的关系,就自己手写了,但是却给我抛出了三个错误:

Error    1    The type System.Data.Entity.DbContext is defined in an assembly that is not referenced. You must add a reference to assembly EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.    F:\Projects\Entity Framework\BL\Order.cs    13    13    BLError    2    The type System.Data.Entity.DbSet`1<T0> is defined in an assembly that is not referenced. You must add a reference to assembly EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.    F:\Projects\Entity Framework\BL\Order.cs    15    13    BLError    3    System.Data.Entity.DbSet`1<DAL.Order> does not contain a definition for ToList and no extension method ToList accepting a first argument of type System.Data.Entity.DbSet`1<DAL.Order> could be found (are you missing a using directive or an assembly reference?)    F:\Projects\Entity Framework\BL\Order.cs    15    20    BL

根据提供的信息,发现需要再次引用EntityFramework.dll,去BL的bin目录下查看,发现确实没有EF.dll。然后添加EF.dll到bin下,再次编译就通过了,智能提示也有了。

然后在此运行项目,但是又给报了个错误:

Additional information: No connection string named DataBaseFirstDBEntities could be found in the application config file.

根据提示去DAL的config文件找这个connection string,发现是有的,和构造函数里的那个需要的名称是一样的,感到非常奇怪。怀疑是DAL层的模型可能有问题,就将查询数据库的跨点缩小,在UI层随便call一个BL的方法,让这个方法去驱动DL层里的一个用来测试的方法,这个方法直接实例化一个context对象,然后查询一个表。发现得到了想要的结果。比较两次运行的不同,第一次是在BL层里实例化化了context,然后查询数据库,再根据提示的错误信息,想到可能在BL层里也需要在config文件里配置连接字符串,然后就copy了DAL的字符串到BL,再次运行程序,得到了预期的结果。

网上查了下,发现这个问题还是比较常见的,配置文件在添加引用的时候,是不会被添加到目标项目的。但是为什么在BL层里实例化需要BL层的配置信息就不是很清楚了。有机会需要去了解下。

 

EF作为DAL层遇到的问题