我目前正在.NET核心的API中使用EF首先使用数据库。我创建了我的数据库并使用了命令:
Scaffold-DbContext "Server=server;Database=database;User Id=user;Password=pwd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f
(这是因为由于我使用了-f标志来覆盖我的模型文件夹,所以事情不起作用)。
我的数据库是这样的:
看起来应该是这样的:
所有由自身生成的代码看起来都很棒,让我们以用户为例:
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");
});
但是,当我从控制器类调用任何函数时,我的上下文对象都会返回一个“无效对象名”异常,同时搜索它们(甚至在调试器期间查看异常)。这是它失败的路线,即使在我看来,它没有太多重要的东西:
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, Action
1 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, Func
3操作(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, Func
3操作),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, Func
3操作,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, Action
1 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, Func
3操作中,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, Func
3操作中,Func#en4 20#()错误号:208,状态:1,类:16
感谢您花时间阅读这篇文章,并可能会有所帮助。
发布于 2022-05-12 10:54:31
在查看了所有提到的连接字符串之后,我意识到使用函数Scaffold-DbContext在上下文类本身中创建dbconnection。但是我习惯于在启动类中创建dbconnection,其中的连接字符串也是在那里设置的。但是那个已经过时了,这个是在函数生成之前使用的,这是正确的。
现在,我将连接字符串放入一个文件中,并在任何地方访问相同的字符串!感谢@feal,它帮助我检查连接字符串。
https://stackoverflow.com/questions/72211801
复制相似问题