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 中用于记录数据库迁移历史的系统表。这个表的主要作用是追踪和管理数据库模型随时间的变化。
具体作用如下:
-
记录迁移历史: 每次你运行
dotnet ef migrations add
命令来添加新的迁移时,Entity Framework Core 会将新的迁移信息记录到__EFMigrationsHistory
表中。这样可以确保你可以回溯查看数据库模型的变化历史。 -
标识已应用的迁移: 表中的记录标识了数据库已应用的迁移。这有助于 Entity Framework Core 确定哪些迁移需要应用到数据库中。
-
支持
dotnet ef database update
命令: 当你运行dotnet ef database update
命令时,Entity Framework Core 会检查__EFMigrationsHistory
表,确定需要应用哪些迁移以更新数据库到目标模型。 -
支持回滚: 通过查看
__EFMigrationsHistory
表的记录,你可以选择回滚到特定的迁移版本,即撤销之前的数据库迁移。 -
版本控制: 记录迁移历史可以帮助你进行版本控制,了解数据库模型的演变情况。
总的来说,就是没事别删它。可以保留着。
测试是否可以查询,更新数据
接下来查询下是否可以查询,更新数据
在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);
}
至此,确定已经可以正常使用!!