C# 博士后:为什么获胜';来自CLI的EF核心3支架

C# 博士后:为什么获胜';来自CLI的EF核心3支架,c#,entity-framework,asp.net-core-mvc,C#,Entity Framework,Asp.net Core Mvc,当我试图 dotnet ef dbcontext scaffold name=myconnection Npgsql.EntityFrameworkCore.PostgreSQL -o Models -v^ 它失败的原因如下 System.TypeLoadException: Could not load type 'Microsoft.EntityFrameworkCore.Metadata.RelationalAnnotations' from assembly 'Microsoft.E

当我试图

dotnet ef dbcontext scaffold name=myconnection Npgsql.EntityFrameworkCore.PostgreSQL -o Models -v^

它失败的原因如下

System.TypeLoadException: Could not load type 'Microsoft.EntityFrameworkCore.Metadata.RelationalAnnotations' from assembly 'Microsoft.EntityFrameworkCore.Relational, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
   at Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.GetExtensions(NpgsqlConnection connection, DatabaseModel databaseModel)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(DbConnection dbConnection, DatabaseModelFactoryOptions options)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(String connectionString, DatabaseModelFactoryOptions options)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ReverseEngineerScaffolder.ScaffoldModel(String connectionString, DatabaseModelFactoryOptions databaseOptions, ModelReverseEngineerOptions modelOptions, ModelCodeGenerationOptions codeOptions)
   at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String outputContextDir, String dbContextClassName, IEnumerable`1 schemas, IEnumerable`1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String outputDbContextDir, String dbContextClassName, IEnumerable`1 schemaFilters, IEnumerable`1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Could not load type 'Microsoft.EntityFrameworkCore.Metadata.RelationalAnnotations' from assembly 'Microsoft.EntityFrameworkCore.Relational, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

System.TypeLoadException:无法从程序集“Microsoft.EntityFrameworkCore.Relational,Version=3.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.EntityFrameworkCore.Metadata.RelationalAnnotations”。
位于Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.GetExtensions(NpgsqlConnection connection,DatabaseModel DatabaseModel)
在Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(数据库连接数据库连接数据库模型工厂选项)
位于Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.Create(字符串连接字符串,DatabaseModelFactoryOptions)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.ReverseeEngineerCafFolder.ScaffoldModel(字符串连接字符串、数据库模型工厂选项数据库选项、模型ReverseeEngineerOptions模型选项、模型代码生成选项代码选项)
位于Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(字符串提供程序、字符串连接字符串、字符串outputDir、字符串outputContextDir、字符串dbContextClassName、IEnumerable`1模式、IEnumerable`1表、布尔useDataAnnotations、布尔重写文件、布尔useDatabaseNames)
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(字符串提供程序、字符串连接字符串、字符串输出目录、字符串输出目录ContextDir、字符串dbContextClassName、IEnumerable`1架构过滤器、IEnumerable`1表格过滤器、布尔useDataAnnotations、布尔重写文件、布尔useDatabaseNames)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.c__DisplayClass0_0.b_0()中
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_0`1.b__0()中
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作)
无法从程序集“Microsoft.EntityFrameworkCore.Relational,版本=3.0.0.0,区域性=中性,PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.EntityFrameworkCore.Metadata.RelationalAnnotations”。
我试过很多东西。我需要使用v3的东西,因为设计数据库的天才决定不向无数个表中添加主键

要复制这一点: -在postgres中创建没有主键的db -安装.netcore sdk 3x -创建一个新项目(我尝试了console和mvc,但没有成功),并将您的连接字符串添加到appsettings.json

-安装以下nuget软件包

<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0-preview6.19307.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.0-preview5" />

-


好的,这个过程应该为所有的表提供模型。我缺少什么?

没有键,您只能查询实体。这就是你想要的吗?有一些id字段,它们的名称不一致,并且在postgres中没有设置为PK。为什么我只能查询?没有键的实体是不能修改的,您所指的EF Core 3功能是构建这些只读查询类型。您应该坚持EF Core 2,只需手动构建表,或者从定义了主键的数据库副本开始,如果您希望EF进行构建。没有键,您只能查询实体。这就是你想要的吗?有一些id字段,它们的名称不一致,并且在postgres中没有设置为PK。为什么我只能查询?没有键的实体是不能修改的,您所指的EF Core 3功能是构建这些只读查询类型。您应该坚持使用EF Core 2,只需手动构建表,或者从定义了主键的数据库副本开始,如果您希望EF能够构建表。