C# 为什么我们需要将类库项目从中继承的对程序集的引用添加到使用者项目中?

C# 为什么我们需要将类库项目从中继承的对程序集的引用添加到使用者项目中?,c#,.net,entity-framework,C#,.net,Entity Framework,我的解决方案包括两个项目: 一个类库项目(名为DataAccess),定义从DbContext继承的类(名为MyContext)。由于DbContext是在EntityFramework.dllassembly中定义的,因此我需要将对该程序集的引用添加到此类库项目中。我对这个机制并不感到困惑 一个控制台应用程序项目(名为Tester),它使用上面类库中定义的DataAccess类。添加对上面类库程序集的引用是可以理解的。不幸的是,我无法编译该解决方案,除非我将对EntityFramework.

我的解决方案包括两个项目:

  • 一个类库项目(名为
    DataAccess
    ),定义从
    DbContext
    继承的类(名为
    MyContext
    )。由于
    DbContext
    是在
    EntityFramework.dll
    assembly中定义的,因此我需要将对该程序集的引用添加到此类库项目中。我对这个机制并不感到困惑
  • 一个控制台应用程序项目(名为
    Tester
    ),它使用上面类库中定义的
    DataAccess
    类。添加对上面类库程序集的引用是可以理解的。不幸的是,我无法编译该解决方案,除非我将对
    EntityFramework.dll
    的引用添加到此控制台应用程序中
为什么我们需要将类库项目从中继承的对程序集的引用添加到使用者项目中?
在我的心智模型中,只需将对
DataAccess
项目程序集的引用添加到
Tester
项目中就足够了,链接引用应该自动完成。

因为
MyContext
中的许多行为都是从实体框架中的基类继承的。如果从
Tester
调用这些方法(例如
SaveChanges()
),则
Tester
应用程序需要对定义该方法的类库的引用


如果您只访问类库中定义的
MyContext
方法,我认为您可以不引用基类。

因为否则在构建项目时,
EntityFramework.dll
不会复制到输出目录,并且库将无法访问它


如果您能够将
EntityFramework.dll
嵌入到库中(右键单击引用->属性),则无需在控制台应用程序上引用它

但如果我首先使用数据库并从数据库添加EDMX,则控制台应用程序不需要entityframework.dll。但是code First需要它。