实体框架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。

我做错了什么吗?还是只能这样?

实体框架5库消费者需要实体框架dll

你没有做错任何事。如果您希望业务层不依赖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