提问人:Xrou 提问时间:11/2/2023 最后编辑:Dale KXrou 更新时间:11/3/2023 访问量:46
如果引发错误,请从数据库中选择实体
Select entity from database if that throws an error
问:
我将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]
我该如何解决这个问题?
答:
1赞
Panagiotis Kanavos
11/2/2023
#1
该表在架构中定义。您需要在属性或 中指定,例如:suz
Table
OnModelCreating
[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 Catalog
Database
0赞
Panagiotis Kanavos
11/2/2023
如果下载 SQL Server 示例数据库,你将看到架构用于将表组织到 Sales 和 Purchasing 架构中。不同的用户可以根据其角色获得对不同架构的权限。您仍然可以跨架构 JOIN 表,而不会受到任何跨数据库的惩罚
评论
suz
[Table("accessgroups", Schema = "suz")]
nvarchar(max)
nvarchar(max)