如果引发错误,请从数据库中选择实体

Select entity from database if that throws an error

提问人:Xrou 提问时间:11/2/2023 最后编辑:Dale KXrou 更新时间:11/3/2023 访问量:46

问:

我将MySQL数据库迁移到SQL Server。我的项目使用实体框架。我有数据库类

public class Database : DbContext
{
    public Database() { }

    public Database(DbContextOptions<Database> options) : base(options)
    {
    }

    public DbSet<AccessGroup> AccessGroups { get; set; }
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=my_server;User ID=user;password=password;database=suz;Initial Catalog=suz;Trusted_Connection=False;TrustServerCertificate=True;Encrypt=False;MultipleActiveResultSets=true;");
    }
}

和 AccessGroup 类

[Table("accessgroups")]
public class AccessGroup
{
    public long Id { get; set; }
    public string Name { get; set; }

    public bool CanSubscribe { get; set; }
    public bool CanSeeHisTickets { get; set; }
    public bool CanSeeCompanyTickets { get; set; }
    public bool CanSeeAllTickets { get; set; }
    public bool CanEditTickets { get; set; }
    public bool CanDeleteTickets { get; set; }
    public bool CanSeeServiceComments { get; set; }
    public bool CanRegisterUsers { get; set; }
    public bool CanSelectTopic { get; set; }
    public bool CanEditUsers { get; set; }
    public bool CanSelectUrgency { get; set; }
    public bool CanTakeTickets { get; set; }
    public bool CanAssignTickets { get; set; }
    public bool CanFinishTickets { get; set; }
    public bool CanMoveTickets { get; set; }
}

但是当我尝试从数据库中获取它时,它会抛出错误:

database.AccessGroups.ToList()

Microsoft.Data.SqlClient.SqlException (0x80131904): 无效的对象名称“accessgroups”。

下面是它执行的查询

 SELECT [a].[Id], [a].[CanAssignTickets], [a].[CanDeleteTickets], [a].[CanEditTickets], [a].[CanEditUsers], [a].[CanFinishTickets], [a].[CanMoveTickets], [a].[CanRegisterUsers], [a].[CanSeeAllTickets], [a].[CanSeeCompanyTickets], [a].[CanSeeHisTickets], [a].[CanSeeServiceComments], [a].[CanSelectTopic], [a].[CanSelectUrgency], [a].[CanSubscribe], [a].[CanTakeTickets], [a].[Name]
  FROM [accessgroups] AS [a]

有我的数据库配置

enter image description here

我该如何解决这个问题?

C# SQL-Server 实体框架

评论

0赞 Panagiotis Kanavos 11/2/2023
该错误指出该表不存在。您连接到错误的数据库或忘记创建表
0赞 siggemannen 11/2/2023
可能与架构有关。该表有一些非默认的
1赞 Panagiotis Kanavos 11/2/2023
将表架构发布为文本,而不是指向图像的链接。
0赞 Svyatoslav Danyliv 11/2/2023
看起来它有模式。suz[Table("accessgroups", Schema = "suz")]
0赞 Panagiotis Kanavos 11/2/2023
使用名称是一个坏主意,除非您期望名称包含数百万个字符。 是一种特殊类型,具有特殊的、较慢的存储空间,适用于高达 2GB 的大文本nvarchar(max)nvarchar(max)

答:

1赞 Panagiotis Kanavos 11/2/2023 #1

该表在架构中定义。您需要在属性或 中指定,例如:suzTableOnModelCreating

[Table("accessgroups", Schema="suz")]
public class AccessGroup

评论

0赞 Xrou 11/2/2023
谢谢它有效,但为什么没有效果呢?database=suz;Initial Catalog=suz;
0赞 Panagiotis Kanavos 11/2/2023
架构不是数据库。一个数据库可以包含多个架构。只有MySQL将这两个术语视为同一事物。在 Oralce、PostgreSQL 和 SQL Server 中,架构是数据库内部的细分,具有自己的权限
0赞 Xrou 11/2/2023
这可能就是导致我如此困难的原因
0赞 Panagiotis Kanavos 11/2/2023
顺便说一句,和 是连接字符串中的同义词。Initial CatalogDatabase
0赞 Panagiotis Kanavos 11/2/2023
如果下载 SQL Server 示例数据库,你将看到架构用于将表组织到 Sales 和 Purchasing 架构中。不同的用户可以根据其角色获得对不同架构的权限。您仍然可以跨架构 JOIN 表,而不会受到任何跨数据库的惩罚