EF(Entity Framework)是一个开源的对象关系映射框架,它可以让.NET开发者在不了解SQL的情况下,也能对数据库进行操作,Oracle数据库是一种广泛使用的关系型数据库管理系统,本文将详细介绍如何使用EF配置Oracle数据库的具体操作方法。
安装Oracle数据库和ODP.NET驱动
1、下载并安装Oracle数据库:访问Oracle官网(https://www.oracle.com/database/technologies/appdev/windows/downloads.html),下载适合自己操作系统的Oracle数据库版本,并按照安装向导进行安装。
2、下载并安装ODP.NET驱动:访问Oracle官网(https://www.oracle.com/database/technologies/appdev/dotnet-software-developer-kit-oci.html),下载适合自己操作系统的ODP.NET驱动,并按照安装向导进行安装。
创建一个新的ASP.NET项目
1、打开Visual Studio,创建一个新的ASP.NET Web应用程序项目,命名为“EFOracleDemo”。
2、选择.NET Framework版本,这里我们选择4.7.2。
3、选择“Web应用程序”模板,点击“确定”按钮。
添加EntityFramework和Oracle.ManagedDataAccess NuGet包
1、右键点击解决方案资源管理器中的“EFOracleDemo”项目,选择“管理NuGet程序包”。
2、在“浏览”选项卡中,搜索“EntityFramework”,选择“Microsoft.EntityFrameworkCore”和“Microsoft.EntityFrameworkCore.Design”两个包,点击“安装”按钮。
3、在“浏览”选项卡中,搜索“Oracle”,选择“Oracle.ManagedDataAccess”包,点击“安装”按钮。
配置EntityFramework连接字符串
1、打开App_Start文件夹下的“Startup.cs”文件。
2、在ConfigureServices
方法中,添加以下代码:
services.AddDbContext<MyDbContext>(options => options.UseOracle(Configuration.GetConnectionString("DefaultConnection")));
3、在Startup
类中,添加一个名为“DefaultConnection”的连接字符串,如下所示:
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); }
创建实体类和DbContext类
1、在项目中创建一个名为“Entities”的文件夹,用于存放实体类。
2、在“Entities”文件夹中,创建一个名为“Person”的类,继承自DbContext
类,代码如下:
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EFOracleDemo.Entities { public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public class MyDbContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseOracle(Configuration.GetConnectionString("DefaultConnection")); } public DbSet<Person> Persons { get; set; } } }
编写控制器和视图以操作数据库
1、在项目中创建一个名为“Controllers”的文件夹,用于存放控制器类。
2、在“Controllers”文件夹中,创建一个名为“HomeController”的类,代码如下:
using Microsoft.AspNetCore.Mvc; using EFOracleDemo.Entities; using System; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using System.Diagnostics; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System.Reflection; using Microsoft.AspNetCore.Authorization; // ...其他代码省略...
3、在“HomeController”类中,添加以下代码以实现添加、查询和删除操作:
```csharp // ...其他代码省略... public async Task<IActionResult> Index() { var persons = await _context.Persons.ToListAsync(); return View(persons); } public async Task<IActionResult> Create([Bind("Id,Name,Age")] Person person) { if (ModelState.IsValid) { await _context.Persons.AddAsync(person); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(person); } public async Task<IActionResult> Edit(int? id) { if (id == null) { return NotFound(); } var person = await _context.Persons.FindAsync(id); if (person == null) { return NotFound(); } return View(person); } [HttpPost] public async Task<IActionResult> Edit(int id, [Bind("Id,Name,Age")] Person person) { if (id != person.Id) { return NotFound(); } if (ModelState.IsValid) { try { var entry = await _context.Entry(person).ReloadAsync(); entry.Property(e => e.Name).IsModified = true; entry.Property(e => e.Age).IsModified = true; await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!PersonExists(person.Id)) { return NotFound(); } else { throw; } } } return RedirectToAction(nameof(Index)); } public async Task<IActionResult> Delete(int? id) { if (id == null) { return NotFound(); } var person = await _dbContext1006958665587849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859849859EFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFOracleDemoEFPersonIndexView
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/346583.html