【发布时间】:2015-11-06 20:52:46
【问题描述】:
我首先使用 EF 代码编写测试应用程序。我在不同的层之间分布了代码。我以为我只需要将实体框架包安装到数据访问层,但我最终将包(添加 dll)安装到所有层,即 UI、BLL、模型、DAL。这是可以的还是我做错了什么。下面是示例代码,让您了解我正在尝试做什么
模型层
这个层是所有其他层/项目的参考
namespace Model
{
Public class Sample
{
[ForeignKey("Sample2Id")]
...
}
}
在这一层我不得不使用实体框架 dll,因为像 [ForeignKey.. 这样的数据注释
DAL
namespace DAL
{
public class SampleContext:DbContext
{
...
}
}
在 DAL 中,我只有上下文类和迁移
BLL
namespace BLL
{
public class SampleBLL
{
public List<Sample> GetAll()
{
retrn new SampleContext().Samples().ToList()
}
}
}
如果我为 BLL 卸载 EF,我会收到以下错误 System.Data.Entity.DbContext 类型是在未引用的程序集中定义的。
用户界面
namespace UI
{
public class UIHelper
{
public List<Sample> GetSamples()
{
return new SampleBLL().GetAll();
}
}
}
如果我从 UI 卸载 EF 包,我会收到以下错误
实体框架提供程序类型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' 在应用程序配置文件中注册 对于具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序 无法加载。确保程序集限定名称是 已使用并且该程序集可用于正在运行的应用程序
【问题讨论】:
-
您必须在所有层(引用它)中安装 EF dll。我不知道为什么这是必要的。我希望我们能找到能解释的人。
标签: entity-framework ef-code-first entity-framework-6