Entity framework 我们应该向所有层添加实体框架dll吗
我正在使用EF代码编写一个测试应用程序。我在不同的层之间分发了代码。我原以为我只需要将entity framework包安装到数据访问层,但最终我将该包(添加DLL)安装到所有层,即UI、BLL、Models和DAL。这没关系,还是我做错了什么。下面是示例代码,让您了解我正在尝试做什么 模型层 此图层在所有其他图层/项目中都是参考图层Entity framework 我们应该向所有层添加实体框架dll吗,entity-framework,ef-code-first,entity-framework-6,Entity Framework,Ef Code First,Entity Framework 6,我正在使用EF代码编写一个测试应用程序。我在不同的层之间分发了代码。我原以为我只需要将entity framework包安装到数据访问层,但最终我将该包(添加DLL)安装到所有层,即UI、BLL、Models和DAL。这没关系,还是我做错了什么。下面是示例代码,让您了解我正在尝试做什么 模型层 此图层在所有其他图层/项目中都是参考图层 namespace Model { Public class Sample { [ForeignKey("Sample2Id")]
namespace Model
{
Public class Sample
{
[ForeignKey("Sample2Id")]
...
}
}
在这一层中,由于像[ForeignKey..
DAL
namespace DAL
{
public class SampleContext:DbContext
{
...
}
}
namespace BLL
{
public class SampleBLL
{
public List<Sample> GetAll()
{
retrn new SampleContext().Samples().ToList()
}
}
}
在DAL中,我只有上下文类和迁移
BLL
namespace DAL
{
public class SampleContext:DbContext
{
...
}
}
namespace BLL
{
public class SampleBLL
{
public List<Sample> GetAll()
{
retrn new SampleContext().Samples().ToList()
}
}
}
名称空间BLL
{
公共类样本
{
公共列表GetAll()
{
重新生成新的SampleContext().Samples().ToList()
}
}
}
如果我为BLL卸载EF,我会得到以下错误
类型System.Data.Entity.DbContext是在未引用的程序集中定义的
UI
namespace UI
{
public class UIHelper
{
public List<Sample> GetSamples()
{
return new SampleBLL().GetAll();
}
}
}
命名空间用户界面
{
公共类UIHelper
{
公共列表GetSamples()
{
返回新的SampleBLL().GetAll();
}
}
}
如果我从UI卸载EF包,我会得到以下错误
实体框架提供程序类型
'System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer已在应用程序配置文件中注册
对于具有固定名称“System.Data.SqlClient”的ADO.NET提供程序
无法加载。请确保程序集限定名为
已使用,并且程序集对正在运行的应用程序可用
我创建了一个示例项目,它与您当前的设置非常相似,没有模型层/DAL分离 我有三个项目,DAL(其中包含对
EntityFramework.dll
和EntityFramework.SqlServer.dll
)的引用,BLL只调用DAL中的一个方法,UI只调用BLL方法
我必须将
、
和DAL的app.config
部分添加到UI的
当我第一次运行代码时,我遇到了与您遇到的相同的错误。因此,我查看了我的UI项目的debug文件夹,发现EntityFramework.dll
由于DAL对它的依赖性而被复制到该文件夹中。我还注意到EntityFramework.SqlServer.dll
s未复制到调试文件夹,尽管DAL也依赖于它
我将EntityFramework.SqlServer.dll
复制到UI项目的调试文件夹中,然后重新运行该项目,Viola!我的代码按预期运行
这里的问题似乎是一个dll没有像预期的那样复制到UI项目调试文件夹中。您必须在所有层(引用它)中安装EF dll。我不知道为什么有必要这样做。我希望我们能找到能够解释的人。