vs2022 使用EFcore连接Orcale 代码优先 (Code-First)

nuget包导入

将以下三个包导入

Oracle.EntityFrameworkCore

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.Tools

此处注意版本一致,我用的是.net 6 所以我使用的ef core 和ef core tools版本均为6.0

这里和数据库优先的前置步骤一样

类添加

导完所有的包之后,新建文件夹 context、entity,一个用来存放实体类,一个用来存放上下文类,

在entity文件夹下新建实体类UserInso、Product类 ,代码如下

    [Table("PRODUCT")]
    public class Product
    {
        [Column("ProductId ")]
        [Key]
        public int ProductId { get; set; }
        [Column("Name ")]
        public string Name { get; set; }
    }
  [Table("USER_INFOS")]
    public class UserInfo
    {
        [Column("ID")]
        [Key]
        public int Id { get; set; }
        [Column("UserName")]
        public string UserName { get; set; }
        [Column("Password")]
        public string Password { get; set; }
        [Column("CreateDate")]
        public DateTime CreateDate { get; set; }
        [Column("Phone")]
        public string Phone { get; set; }
    }

这里填一下坑,如果不在建立的实体类上添加注解[Table("表名")],并且你类名是大小写并存的,那么,你就会变得不幸,你所建立的数据库表会自动给你加上两个双引号,如之前我的预期结果是UserInfos,但是!!!在数据库中却是只能通过select * from "UserInfos"才能查询到,这就说明表名莫名其妙被加上了两个双引号,原本的表名应该是UserInfos 结果变成了"UserInfos",经过我的查找并实验,解决方案就是在实体添加注解属性,规定表名和列名。

再在context文件夹下新建上下文类AppDbContext(名字自己定义,开心就好),代码如下

 public class AppDbContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<UserInfo> UserInfos { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseOracle("User ID=JHA;Password=密码;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT =1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))");
        }
    } 

 程序包管理器控制台运行

在下方的程序包管理器控制台下运行如下代码

Add-Migration UpdateInfo

Update-Database

上述的Add-Migration UpdateInfo中UpdateInfo为迁移名称,可自己更改

Update-Database进行数据库更改

后续可以添加实体类,然后更新上下文,再次运行这两个代码即可更新数据库

数据库验证

执行完毕之后可以在数据库查看有无这两张表,有则成功

可以看到,数据库中已经存在了这两张表,还多出一张表 __EFMigrationsHistory 

这张表是 Entity Framework Core 中用于记录数据库迁移历史的系统表。这个表的主要作用是追踪和管理数据库模型随时间的变化。

具体作用如下:

  1. 记录迁移历史: 每次你运行 dotnet ef migrations add 命令来添加新的迁移时,Entity Framework Core 会将新的迁移信息记录到 __EFMigrationsHistory 表中。这样可以确保你可以回溯查看数据库模型的变化历史。

  2. 标识已应用的迁移: 表中的记录标识了数据库已应用的迁移。这有助于 Entity Framework Core 确定哪些迁移需要应用到数据库中。

  3. 支持 dotnet ef database update 命令: 当你运行 dotnet ef database update 命令时,Entity Framework Core 会检查 __EFMigrationsHistory 表,确定需要应用哪些迁移以更新数据库到目标模型。

  4. 支持回滚: 通过查看 __EFMigrationsHistory 表的记录,你可以选择回滚到特定的迁移版本,即撤销之前的数据库迁移。

  5. 版本控制: 记录迁移历史可以帮助你进行版本控制,了解数据库模型的演变情况。

总的来说,就是没事别删它。可以保留着。 

测试是否可以查询,更新数据

接下来查询下是否可以查询,更新数据

在program.cs中输入以下代码(因为我建的是控制台程序,所以在这,如果新建的是别的,那么自己找合适的位置测试就可以)

// See https://aka.ms/new-console-template for more information

using CodeFirst_Orcale.Context;
using CodeFirst_Orcale.Entity;

AppDbContext DB = new AppDbContext();
Product p1 = new Product();
p1.ProductId = 2;
p1.Name = "测试2";
DB.Products.Add(p1);
DB.SaveChanges();

var products = from product in DB.Products
         select product;
foreach(Product p in products)
{
    Console.WriteLine("ID为:"+p.ProductId+" 产品名为:"+p.Name);
}

至此,确定已经可以正常使用!! 

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值