Entity framework core Blazor w/Entity Framework核心-编译错误

Entity framework core Blazor w/Entity Framework核心-编译错误,entity-framework-core,blazor,Entity Framework Core,Blazor,我有以下设置,但无法完成构建,因为我在文件Blazor.monorauntime.targets(MSB3073)中遇到了与第439行相关的模糊错误 这本质上是否意味着实体框架核心将无法与Blazor preview 6配合使用 详情: Asp.net托管Blazor AspNetCore.Blazor(3.0.0-preview6.19307.2) Microsoft.EntityFrameworkCore(3.0.0-preview6.19304.10) Microsoft.EntityF

我有以下设置,但无法完成构建,因为我在文件
Blazor.monorauntime.targets
(MSB3073)中遇到了与第439行相关的模糊错误

这本质上是否意味着实体框架核心将无法与Blazor preview 6配合使用

详情:

  • Asp.net托管Blazor
  • AspNetCore.Blazor(3.0.0-preview6.19307.2)
  • Microsoft.EntityFrameworkCore(3.0.0-preview6.19304.10)
  • Microsoft.EntityFrameworkCore.Design(3.0.0-preview6.19304.10)
  • Microsoft.EntityFrameworkCore.SqlServer(3.0.0-preview6.19304.10)
通过黑客解决方案解决

不知何故,我能够解决所有问题,让事情顺利进行 端到端。我认为重要的关键是:
*确保Blazor客户端和服务器项目不直接引用实体框架
*不要让Blazor客户机(直接或间接)使用生成的实体引用项目)。为了访问模型,我 只需创建生成实体的副本(并删除 “部分”来自生成的类)


这里需要一些澄清,对吗

  • 您不能在Blazor的客户端项目上使用实体框架。实体框架是一种服务器技术

  • 您可以在应用程序的服务器项目上使用实体框架

  • 客户端和服务器托管端之间的通信通常通过Http调用(HttpClient服务)完成,但您也可以使用SignleR

  • 要启用Http调用,您应该公开Http路由端点。。。这可以通过使用具有所需端点的Web Api来启用。您的Web Api公开方法(控制器的方法)可以通过实体框架对象直接(或者如果您定义了存储库、服务等,则可以间接)访问数据库,并将查询的数据返回给调用方法(HttpClient方法)

请注意,在我的回答中,我特别提到Blazor客户端应用程序,但对于Blazor服务器端应用程序,这一点基本上是正确的。我可以在此补充一点,在Blazor服务器端应用程序中,您不必使用Web Api,因为Blazor是在服务器上执行的。在这种情况下,您可以定义一个普通服务来从数据库检索数据,并将其传递给调用方法(这里不涉及HttpClient)

  • 共享项目旨在包含前端和后端都可以使用的对象。这是可以定义模型对象的地方。例如,您可以定义一个Employee类,用于检索数据并将其作为Employee对象列表传递给客户机,并且在客户机中您可以定义一个Employee对象列表来存储检索到的数据。简而言之,您不必定义两种类型的对象,一种适用于服务器,另一种适用于客户端(假设您的客户端是Angular应用程序)

希望这有帮助

您正在尝试从Blazor客户端使用EntityFramework吗?如果是这样,这是不可能的。我希望Blazor服务器项目与数据层项目通信(通过API)。我在这个数据项目中通过脚手架生成了EF数据上下文。所以现在我有数据项目(它有生成的DB上下文)和服务器项目(它有EF6引用,因为脚手架需要它),你的“黑客解决方案”真的很糟糕。只需查看托管的初学者模板。当然,服务器部分可以使用EF。“DTO模型是一个好主意,但不应该是必要的。”亨克奥尔特曼-你能建议一个更好的方法吗?我已经建议过了。托管应用程序的服务器部分可以也应该引用EF。代码优先模型是完全独立的,所以它可以在共享部分,但更好的体系结构说它不应该。一个数据库fiest模型是有点难戒掉EF,但你所做的有点好。但请注意,DTO不必是实体类的精确副本。根据需要展平并省略。谢谢您的回答。这与我对这一切的理解基本一致。