实体框架5库消费者需要实体框架dll
本文关键字:实体 框架 dll 消费者 | 更新日期: 2023-09-27 18:17:21
我有一个项目"项目。实体框架",它包含我的数据库的上下文。当尝试使用来自同一解决方案"project"中的单独项目的上下文时。业务":
using (var db = new EntityFramework.Entities())
{
// Code
}
我在"using"上得到编译器错误:
Error 12 'EntityFramework.Entities': type used in a using statement must be implicitly convertible to 'System.IDisposable' ....
现在我可以按F12向下钻取到实体,并看到它正在实现IDisposable -我可以使这个错误消失,如果我把参考dll到实体框架的"项目"。但这违背了我想要实现的目的——在我的业务层中不依赖EF。
我做错了什么吗?还是只能这样?
你没有做错任何事。如果您希望业务层不依赖EF,则需要用其他东西包装对DbContext类的访问。Repository模式是一种流行的模式。
为了进一步解释@Spivonious的回答,下面是我在DbContext上完成存储库模式所做的事情——希望它大部分实现正确:/
public interface IFooEntity : IDisposable
{
IEnumerable<Foo> Get();
}
public class FooRepository : IFooEntity
{
private readonly Entities _context;
public FooService()
{
this._context = new Entities();
}
public IEnumerable<Foo> Get()
{
return _context.Foo;
}
public void Dispose()
{
_context.Dispose();
}
}
原代码来自问题:
using (var db = new EntityFramework.Entities())
{
// Code
}
更改为:
using (var db = new EntityFramework.Repository.FooRepository())
{
// Code
}
这允许我在独立项目中的代码使用我的存储库而不是上下文本身,从而允许业务项目不必依赖实体框架引用。
在添加一些代码并引用其中带有模型的DLL后,我遇到了同样的问题。经过一阵挠头,我意识到我没有引用EntityFramework。