c# - EF Core 是否缺少 .NET Standard 与 .NET Core 库中的任何内容?

标签 c# asp.net-core .net-core .net-standard ef-core-2.0

我正在构建一个 ASP.NET Core Web API 项目。我将大量使用 EF Core 来连接 SQL Server。我想围绕 3 个主要层组织该项目:核心/逻辑/域、数据/基础设施和 Web/API。

Web/API 肯定会是一个 .NET Core 项目,但我正在努力决定 Core 和 Data 项目应该是 .NET Core 库还是 .NET Standard 库。

我的问题是,在 .NET 标准库中构建数据持久性时,我是否会丢失任何功能或任何内容?

最佳答案

对于类库,目标框架只是指定一个兼容层。最终的功能来自于引用类库的项目目标框架。

例如,假设您创建了一个 .NET Standard 库,然后将其包含在 .NET Framework 项目中。您所做的一切都发生在 .NET Framework 上,并且出于所有意图和目的,您也可以从类库中以 .NET Framework 为目标。选择 .NET Standard 只是表明您将使用来自某些符合 .NET Standard 的目标的 API。就这样。因此,像 EF Core 这样的东西的功能最终取决于您将库放置到什么位置,而不是您的库的目标框架。

至于选择 .NET Standard 还是 .NET Core 作为你的库的目标框架,简单地说:使用 .NET Standard,除非你有充分的理由不这样做。如果您以 .NET Standard 为目标,则可以将其放入任何以与您的库目标的 .NET Standard 版本兼容的任何框架为目标的项目中。如果您选择.NET Core,则只能在.NET Core项目中使用该库。

但是,当您开始关注 .NET Core 3.0 时,事情会变得有点模糊。从技术上讲,您可以以 .NET Standard 2.1 为目标,并获得 .NET Core 3.0 的所有优点,但只有 .NET Core 3.0 实际上支持 .NET Standard 2.1。您可以以 .NET Standard 2.0 为目标,但随后您就只能使用 .NET Core 2.2。换句话说,如果您现在想使用 .NET Core 3.0,那么选择 .NET Standard 2.1 或 .NET Core 3.0 作为库的目标框架在功能上没有区别。无论哪种情况,它都只能在 .NET Core 3.0 项目中工作。

更令人困惑的是,微软正在将所有内容的下一个版本转移到 .NET 5 的保护伞下。那时 .NET Standard 会发生什么还没有被讨论,我想它基本上会消失。一旦有了 .NET 5,任何项目都可以以 .NET 5 为目标,并可以被任何其他以 .NET 5 为目标的项目使用。不过,这还有很长的路要走。我提出这个问题的原因是,如果你现在想使用 .NET Core 3.0,那么除了 .NET Core 3.0 之外,没有什么意义。 .NET Standard 2.1 中的大多数内容都不能向后移植到 .NET Framework 和 Unity 等内容,因此这些内容永远不会出现在 .NET Standard 2.1 上。这些框架的前进方向是使它们与 .NET Core 兼容,最终形成 .NET Core 4.0,微软将其称为 .NET 5。

总而言之,最好的性能和功能是 .NET Core 3.0,只要你能 100% 使用 .NET Core 3.0,那么这就是你应该瞄准的目标。如果您需要在 Xamarin 或 .NET Framework 应用程序中使用您的库,请坚持使用 .NET Standard 2.0。

关于c# - EF Core 是否缺少 .NET Standard 与 .NET Core 库中的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893714/

相关文章:

c# - 在 gridview 中如何为按钮使用 rowcommand 事件

f# - 尽管程序正常运行,类型提供程序 'ProviderImplementation.JsonProvider' 仍报告错误

c# - NHibernate.断言失败 : null identifier

asp.net-core - Web部署+EF Core迁移: how to set target project

c# - 当不满足条件时,如何从 null linq 查询值中获取 0,然后将其设置为 ViewBag

docker - .net core docker 镜像,每个客户都有应用程序设置

docker - docker中的asp.net核心所需的Https

asp.net - 如何在 ASP.NET Core v2 中传递字符串以及注入(inject)的依赖项

c# - 是否可以表达检查约束?

c# - Linq 2 Sql 使用 'Like' 将本地序列与查询进行比较 - 最有效的方法