首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有EF的.NET核心--“无效对象名‘ClassName’”--首先使用数据库

带有EF的.NET核心--“无效对象名‘ClassName’”--首先使用数据库
EN

Stack Overflow用户
提问于 2022-05-12 07:45:12
回答 1查看 299关注 0票数 2

我目前正在.NET核心的API中使用EF首先使用数据库。我创建了我的数据库并使用了命令:

代码语言:javascript
运行
复制
Scaffold-DbContext "Server=server;Database=database;User Id=user;Password=pwd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f

(这是因为由于我使用了-f标志来覆盖我的模型文件夹,所以事情不起作用)。

我的数据库是这样的:

看起来应该是这样的:

所有由自身生成的代码看起来都很棒,让我们以用户为例:

代码语言:javascript
运行
复制
modelBuilder.Entity<User>(entity =>
            {
                entity.ToTable("User");

                entity.Property(e => e.Id).HasColumnName("id");

                entity.Property(e => e.Admin).HasColumnName("admin");

                entity.Property(e => e.CanUpdate).HasColumnName("can_update");

                entity.Property(e => e.CryptoSessionKey).HasColumnName("crypto_session_key");

                entity.Property(e => e.Email)
                    .HasMaxLength(80)
                    .HasColumnName("email");

                entity.Property(e => e.IdCompany).HasColumnName("id_company");

                entity.Property(e => e.Password).HasColumnName("password");

                entity.Property(e => e.Salt).HasColumnName("salt");

                entity.HasOne(d => d.IdCompanyNavigation)
                    .WithMany(p => p.Users)
                    .HasForeignKey(d => d.IdCompany)
                    .HasConstraintName("FK_User_Company");
            });

但是,当我从控制器类调用任何函数时,我的上下文对象都会返回一个“无效对象名”异常,同时搜索它们(甚至在调试器期间查看异常)。这是它失败的路线,即使在我看来,它没有太多重要的东西:

代码语言:javascript
运行
复制
var userInDb = _context.Users.Single(c => c.Email == email);

我尝试用单数(如db)重命名所有上下文的对象列表,但结果相同。也有例外:

失败: Microsoft.EntityFrameworkCore.Database.Command20102失败执行DbCommand (63 30)[参数=@__email_0=‘td@netbee.be’(大小= 80),CommandType='Text',CommandTimeout='30']选择TOP(2) u.id,u.admin,u.can_update,u.crypto_session_key,u.email,u.id_company,u.password,从用户到u的u.salt,其中u.email = @__email_失败:在对上下文类型u.email的查询结果进行迭代时出现了异常Microsoft.Data.SqlClient.SqlException (0x80131904):无效的对象名'User‘。在Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException异常下,Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj上的布尔breakConnection、Action1 wrapCloseInAction) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)、Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、SqlCommand cmdHandler、cmdHandler cmdHandler、cmdHandler dataStream、cmdHandler runBehavior、cmdHandler、Boolean& dataStream)( at at ds、、String、Boolean、Boolean,( Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔isAsync,Int32超时值,任务和任务,布尔asyncWrite,布尔inRetry,SqlDataReader ds,布尔发展) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__19_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3操作(Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__19_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3操作),Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__19_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3操作,Func()错误号:208,状态:1,类:16 Microsoft.Data.SqlClient.SqlException (0x80131904):无效对象名'User‘。在Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException异常下,Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj上的布尔breakConnection、Action1 wrapCloseInAction) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)、Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、SqlCommand cmdHandler、cmdHandler cmdHandler、cmdHandler dataStream、cmdHandler runBehavior、cmdHandler、Boolean& dataStream)( at at ds、、String、Boolean、Boolean,( Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔isAsync,Int32超时值,任务和任务,布尔asyncWrite,布尔inRetry,SqlDataReader ds,布尔发展)在Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__19_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3操作中,Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__19_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3操作中,Func#en4 20#()错误号:208,状态:1,类:16

感谢您花时间阅读这篇文章,并可能会有所帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-12 10:54:31

在查看了所有提到的连接字符串之后,我意识到使用函数Scaffold-DbContext在上下文类本身中创建dbconnection。但是我习惯于在启动类中创建dbconnection,其中的连接字符串也是在那里设置的。但是那个已经过时了,这个是在函数生成之前使用的,这是正确的。

现在,我将连接字符串放入一个文件中,并在任何地方访问相同的字符串!感谢@feal,它帮助我检查连接字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72211801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档