C# 为什么我需要添加相同的引用,而此引用是从另一个项目添加的
这里有一个问题,假设我有两个项目:C# 为什么我需要添加相同的引用,而此引用是从另一个项目添加的,c#,.net,entity-framework,C#,.net,Entity Framework,这里有一个问题,假设我有两个项目: 应用程序(控制台) 数据访问(类库) 在DataAccess项目中,有一个从DbContext继承的DataContext类 public class DataContext : DbContext {...} 在Application project中,我添加了DataAccess引用,在main方法中,我添加了以下语句: using (var context = new DataContext ()){...} 但是雷沙珀秀 类型DbContext在未
public class DataContext : DbContext {...}
在Application project中,我添加了DataAccess引用,在main方法中,我添加了以下语句:
using (var context = new DataContext ()){...}
但是雷沙珀秀
类型DbContext
在未引用的程序集中定义
为什么我需要再次添加相同的程序集
为什么我不能从DataAccess.dll获取DbContext定义
(DataAccess项目通过NuGet添加了EntityFramwork.dll)
编辑1:当一个类型继承了另一个类型(例如:DataContext继承自DbContext)时,为什么编译器没有在同一个dll中包含DbContext的定义,所以在另一个项目中,我们只需要添加对子类型的dll的引用?,因为您的类库(
.dll
)不“包含”它的依赖程序集。因此,如果要使用类库,执行程序集也需要对依赖程序集进行引用
(这与配置文件有点相同,它们也不是嵌入的,因此即使您在类库的配置文件中定义了connectionstring,您也需要在启动应用程序中定义它。)
如果您真的想将库嵌入到单个dll中,您可以查看一下,但建议只在启动应用程序中包含所需的所有库
另一个好的(我可以推荐)是。您只需通过NuGet安装,无需任何配置,下次构建应用程序时,它会将所有内容嵌入到类库中。,因为您要访问的类型位于该程序集上。 因为您希望能够在该类型上定义变量。就像:
DataContext dbContext = new DataContext();
dbContext.Users.ToList();
这就是您希望在表示层中使用DAL执行的操作。但问题是您仍然使用实体框架。
让我们在服务层上创建一个依赖于EntityFramework的函数
List<User> GetUsers()
{
DataContext dbContext = new DataContext();
dbContext.Users.ToList();
}
List GetUsers()
{
DataContext dbContext=新的DataContext();
dbContext.Users.ToList();
}
现在我们可以简单地调用这个服务和函数,而无需添加实体框架引用。那是因为,;在表示层,我们现在与实体框架无关。我们只是调用一个函数。但在您的例子中,您只是将实体框架与另一个项目的上下文一起使用。这就是为什么你的代码需要引用,而我的代码不需要引用。
Thanx所以在C#中,当我向我的项目添加引用时,这并不意味着它将被编译到同一个dll中?当我部署时,应用程序会有重复的dll吗?谢谢!当您部署它时,它将只是带有dll的启动项目。如果你想嵌入dll,我可以向你推荐costura.fody。你唯一要做的就是通过nuget安装,然后就可以开始了