System.Exception:“on 子句”中存在未知列“m.User_id”

问题描述 投票:0回答:1

当我想从数据库中的 Managers 表检索数据时,出现错误:“System.Exception:‘on 子句’中的‘未知列’m.User_id’” 我正在使用 MySql 数据库开发 .Net Maui。数据库已经存在。 EF core 用于处理应用程序中的数据库交互。

Microsoft.EntityFrameworkCore.Database.Command: Error: Failed executing DbCommand (22ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `u`.`User_id`, `u`.`CreatedAt`, `u`.`First_name`, `u`.`Last_name`, `m`.`Manager_id`
FROM `Users` AS `u`
INNER JOIN `Managers` AS `m` ON `u`.`User_id` = `m`.`User_id`
'WaiterEval.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.4\System.Diagnostics.StackTrace.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'WaiterEval.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.4\System.Reflection.Metadata.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'WaiterEval.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.4\System.IO.Compression.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Microsoft.EntityFrameworkCore.Query: Error: An exception occurred while iterating over the results of a query for context type 'WaiterEval.Services.MyDbContext'.
MySqlConnector.MySqlException (0x80004005): Unknown column 'm.User_id' in 'on clause'
    [Table("Managers")]
    public class Manager : User
    {
        public Manager(string First_name, string Last_name, DateTime CreatedAt) : base(First_name, Last_name) { }

        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [ForeignKey("User")]
        public int Manager_id
        {
            get => User_id;
            set => User_id = value;
        }
        public User User { get; set; }
}
    [Table("Users")]
    public class User
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] // Auto-incremented primary key
        public int User_id { get; set; }

        [Required]
        [Column(TypeName = "char(100)")]
        public string First_name { get; set; }

        [Required]
        [Column(TypeName = "char(100)")]
        public string Last_name { get; set; }

        [Required]
        [Column(TypeName = "date")]
        public DateTime CreatedAt { get; set; } = DateTime.Now.Date; // Automatically generated date
}
    public class MyDbContext : DbContext
    {
        public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
        {
        }

        // DbSet properties for your database entities
        public DbSet<User> Users { get; set; }
        public DbSet<Manager> Managers { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Manager>()
              .HasOne(m => m.User)
              .WithMany()
              .HasForeignKey(m => m.Manager_id);

         }
}

我的数据库是使用查询创建的:

CREATE TABLE Users (
    User_id INT NOT NULL AUTO_INCREMENT,
    First_name CHAR(100) NOT NULL,
    Last_name CHAR(100) NOT NULL,
    CreatedAt DATE NOT NULL DEFAULT (CURRENT_DATE),
    PRIMARY KEY (User_id)
);
CREATE TABLE Managers (
    Manager_id INT NOT NULL,
    PRIMARY KEY (Manager_id),
    FOREIGN KEY (Manager_id) REFERENCES Users(User_id)
);

我不明白为什么 ef 在 Managers 中的 user_id 中查找列。

我尝试过TPT、TPH。有和没有导航属性,不同的 OnModelCreating() 方法。结果没有改变。

sql mysql entity-framework maui
1个回答
0
投票

您的管理器类正在扩展 User,因此您会混淆 EF。如果 Manager 是与 User 相关的单独实体/表,则不要继承 User:

public class Manager
{
    [Key]
    public int Manager_id { get; set; }

    [ForeignKey("User_id")]
    public virtual User User { get; set; }
}

如果管理员应该扩展用户,则删除用户导航属性和关系。 Manager 表应该有一个 User_id,因为它的 PK 和 EF 设置为 Table-per-Concrete 继承配置集,以具有单独的 User 和 Manager 表。

© www.soinside.com 2019 - 2024. All rights reserved.