【问题标题】:Necessary references when using class that is derived使用派生类时的必要引用
【发布时间】:2013-09-26 21:25:00
【问题描述】:

我正在使用一个使用实体框架访问 mysql 数据库的简单守护程序。 该解决方案包含两个项目:

  • Test.Daemon
  • Test.DataAccess

Test.DataAccess 将包含所有用于代码优先的类,还包含一个派生自 DbContext 的类 TestDbContext

  • EntityFramework 5 是通过 NuGet 为Test.DataAccess 安装的
  • Test.DataAccessTest.Daemon 中被引用

现在,当我尝试在 Test.Daemon 中使用以下内容时,它抱怨缺少对 EF 的引用:

TestDbContext ctx = new TestDbContext();

产生的错误: “System.Data.Entity.DbContext”类型是在未引用的程序集中定义的。您必须添加对程序集 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'的引用

只要我在Test.Daemon 中引用 EF,代码就可以正常工作。

为什么只引用包含派生类的项目并且本身具有对其派生类的引用是不够的?

【问题讨论】:

  • 为什么?因为它不是这样设计的。
  • 所以你告诉我在我的具体情况下没有办法解决这个问题?
  • 你为什么需要一个“解决办法”呢?只需添加正确的引用。
  • 这不是问题;这是一个要求。您必须在使用您的实体数据模型的任何可执行文件中引用实体框架。就像它的设计方式一样。
  • 好吧,我的意图是尽可能保持整个项目的整洁,我的理解是,如果派生类本身引用其父类,则引用派生类就足够了。显然情况并非如此-感谢您的澄清。柯克,您应该将此添加为简要阐述的答案,以便我可以将其标记为解决方案

标签: c# entity-framework


【解决方案1】:

为什么仅引用包含派生类的项目并且本身具有对其派生类的引用是不够的?

我认为您在这里混淆了一些概念。程序集不是从其他程序集派生的,它们引用它们。这意味着要使用程序集,您必须拥有它引用的所有程序集的副本,依此类推。为什么它们不自动打包在一起?因为如果我的程序使用程序集 x、y 和 z,并且这些程序集都打包成一个公共程序集,这意味着我将在我的程序中拥有该公共程序集的 三个副本。但是由于引用的原因,三个人都只使用了一个程序集副本。

现在,为什么 Visual Studio 不自动为您添加您所依赖的其他程序集?嗯,我撒谎了。除非您实际执行其中存在的代码,否则您实际上并不需要任何程序集。因此,如果我引用程序集 x,并且我只使用不依赖于程序集 y 的程序集 x 的一部分,我就不需要程序集 y。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多