Npgsql.PostgresException:“42P01: relation “Users“ does not exist问题的解决方法(EntityFrameworkCore)

Ciallo~(∠・ω< )⌒☆

一切的起因是我在测试api来操作数据库的时候出现这个报错,本人小白第一次用这个东西,然后也是百思不得其解,我全部流程跟网上的代码基本一致,但是就是在运行的时候会出现这个问题。

省流版:

那是因为你那个set<T> 的变量名xxx与你那个数据库的那个表名xxx不一样导致的,只要你把DBContext里面的DBSet<T> 的那个变量名改的和你的表名一样就好了,结束~~~~~~~

前因(盘古开天说起)

pg数据库:

 很普通对吧

DB代码

        public class User
        {
            public string name { get; set; }
            public string id { get; set; }
        }
        public class DBUser:DbContext
        {
            public DbSet<User> Users { get; set; }
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseNpgsql("Username=postgres;Password=xiedashen666;Host=localhost;Database=Test");
            }
            //protected override void OnModelCreating(ModelBuilder modelBuilder)
            //{
            //    modelBuilder.Entity<User>();
            //}
        }

这段是DBContext代码和User代码,User是数据库Test的Model,DBcontext顺便连接了一下数据库

Main代码

public static void Main(string[] args)
        {
           using (var mb=new DBUser())
            {
                mb.Database.EnsureCreated();
                var blog = mb.Users.ToList();
                Console.WriteLine( blog.Count);
                foreach (var mbb in blog) 
                {
                    Console.WriteLine(4);
                    Console.WriteLine($"{mbb.id}+'____'+{mbb.name}");
                }
            }
            Console.Read();
        }  

然后,运行就出现了

 这里它说Users不存在,然后让我反思是不是数据库连接字符串出了问题,于是考虑是是不是应该public.Test,然后又手贱随便改连接字符串为"Username=postgres;Password=xiedashen666;Host=localhost;Database=public.Test"

还在DBContext里面加了下面这点代码:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<User>();
            }

发现运行成功了,它没报错,但是它没进入前面Main里面的foreach循环,我直接输出那个list的数量,结果Count=0,为什么呢?

分析

如果连接字符串成立,那么应该为1,然后再打开pgsql看看怎么个事,结果是我那个创建数据库的代码生效了,名字叫public.Test非常巧合的是,里面有一个表名叫Users,和我之前那个DBSet<User>那个对象的名字一样! 这就说明一个问题,efcore它还要求对象的名字和表名一模一样,同理,里面对象也是一样(一开始我没注意这个问题),然后我把我原先代码改回来然后改了一下变量名为User(我数据库里面的那个表名就是User),运行成功

 这个问题好烦人,萌新落泪(哭)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值