Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架读取SQL Server表时,对象名称无效_C#_Sql Server_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 使用实体框架读取SQL Server表时,对象名称无效

C# 使用实体框架读取SQL Server表时,对象名称无效,c#,sql-server,asp.net-core,entity-framework-core,C#,Sql Server,Asp.net Core,Entity Framework Core,我试图在ASP.NET核心应用程序中使用Entity Framework建立数据库连接,但每次尝试从数据上下文读取数据时,都无法说明我试图获取的表无效 我对使用ASP.NET内核的EF比较陌生,所以我可能会遗漏一些明显的东西。如何让EF连接/查找我的对象 我的连接字符串如下所示: Data Source=DbServer;Initial Catalog=AIT;Integrated Security=True 我试图读取的表位于DbServer上: 当DB上下文尝试连接时,我得到的错误如下:

我试图在ASP.NET核心应用程序中使用Entity Framework建立数据库连接,但每次尝试从数据上下文读取数据时,都无法说明我试图获取的表无效

我对使用ASP.NET内核的EF比较陌生,所以我可能会遗漏一些明显的东西。如何让EF连接/查找我的对象

我的连接字符串如下所示:

Data Source=DbServer;Initial Catalog=AIT;Integrated Security=True
我试图读取的表位于DbServer上:

当DB上下文尝试连接时,我得到的错误如下:

SqlException:对象名称“processing.orderProcessing”无效

我已经查看了运行时的上下文本身,它正在连接到正确的服务器。我还验证了数据库在连接字符串中是否正确,以及它是否包含processing.orderProcessing表。我还尝试通过使用我的c类上的Table属性显式地告诉EF它应该连接到特定对象:

[Table("AIT.processing.orderProcessing")]
这只会导致我的错误消息更改为:

SqlException:对象名称“AIT.processing.orderProcessing”无效

据我所知,如果它连接到DBServer,它应该能够找到该表,因为它确实存在,并且拼写正确。我只是从SSMS复制/粘贴它以确保

编辑: 下面的答案就是我的答案。将“我的表”属性更改为:

[Table("orderProcessing", Schema = "processing")]
使EF能够连接

所以AIT是数据库名,processing是模式名,orderProcessing是表名

尝试使用以下数据批注分别设置表名和方案名:

[Table("orderProcessing", Schema = "processing")]
或者在DbContext OnModelCreating中使用:


如果您的数据库名为AIT且模式正在处理,则必须将模式名表示为EF core

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.HasDefaultSchema("processing");
}

应用程序使用的帐户可能没有此表的权限。如果您的数据库为:AIT,表名为:processing.orderProcessing,则映射应为:[Tableprocessing.orderProcessing]。我对尝试访问的数据库具有管理员级别的权限。这起到了作用,特别是将模式设置为表属性中的一个单独属性。我有相反的问题。我使用了HasDefaultSchemablopp,创建的表类似于blopp.Customers等。但是,当我尝试通过Context.Customers.Count从表中读取时,我得到的错误是它不在那里。想提出一个原因/解决方案吗?这就像在我使用上下文进行操作时OnModelCreating不起作用,但在创建迁移时却很有效一样。@KonradViltersten我调用了Count函数,它成功了。您如何在EF中命名您的表?private void ConfigureMyClassEntityTypeBuilder{builder.ToTableMyClassTable;}我没有显式调用该表,因此我假设它是在类名为复数时调用的。当我将默认模式设置为dbo或者根本不显式地设置它时,它是有效的,所以不知何故,我的类在读取时丢失了设置的模式。通过显式设置表名,您的问题解决了吗?我不确定我是否会称之为已解决-这更像是一个丑陋的黑客行为。我更想理解为什么在迁移时使用指定的默认模式,而不是在从数据库读取时使用。根据我的经验,这种差异往往是一种更糟糕的迹象,目前还不知道,但正在朝着你的方向发展
 modelBuilder.Entity<MyEntity>().ToTable("orderProcessing", processing);
protected override void OnModelCreating(ModelBuilder builder)
{
    builder.HasDefaultSchema("processing");
}