c# – EF6:必须包含在启动项目中吗?

我有三个项目:持久性,逻辑和测试.

Persistence项目具有EF特定的东西. Logic项目利用Repository模式与Persistence / EF进行交互. Test项目是一个通用控制台,它调用Logic对象并检查我的EF设置是否正确.正常的东西.

为了运行它,我显然需要在Test项目上安装EF(我需要将我的App.Config从EF类lib项目移动/复制到Test项目).

它很好,但是当我进入其他组件/应用程序层项目时,我不希望必须为这些直接处理EF的“入口点”包含整个EF引用.

如何将EF专门保存到其“自己的”项目中?谢谢

编辑可能的重复:可能的重复处理如何将业务逻辑与DAL分离.我的问题涉及为什么演示项目需要引用实体框架:我已经将BAL / DAL隔离并且存储库模式已经到位.

最佳答案 理想情况下,您应该将实体框架框架工作的依赖性限制为尽可能小的数量.最好的方法是仅在具有数据访问代码的层/项目中使用EF(您的数据访问层).如果您将DTO’/ POCO(由EF创建的非实体)返回给那些调用这些数据访问方法(通常来自您的业务层)的人,则会更好.您可以将此DTO保存在单独的项目中(我们称之为YourProject.Common).使用这种方法,您始终可以切换DAL层以使用其他数据访问方法(NHibernate,Pure ADO.NET等).如果您正在使用Entity框架,您仍需要在启动项目中保留Connection字符串(对于EF,以及所有这些元数据:()).

所以您的图层/项目将是这样的

>普通(将有所有的DTO / POCO)
> DataAccess(将有数据访问代码,这个参考
YourProject.Common项目并从该项目返回DTO.您不需要在此项目中保留连接字符串以供应用程序运行,因为这将始终从具有连接字符串的启动项目中调用.但是,请保持App.Config(由EF生成),因为您需要在以后更新EDMX文件以进行数据库更改.
>业务(BL层,这个项目将有2个项目参考,
共同项目和数据访问项目)
> Web / Win表单(这是您的前端/启动项目.
这不会直接与数据访问对话,这将有2
项目参考,通用和数据访问).这将有你的连接字符串.

点赞