环境:Oracle11g远程数据库、
vs2019(集成.net Core2.2,安装时选择.NET桌面开发、右边.net core2.2开发工具,和.NET Core跨平台、.net core2.2开发工具)、
vs2019下载NuGet程序包管理器(工具->拓展与更新,安装后关闭vs2019,重启后即可在工具栏找到NuGet包管理器)、
PowerShell6.1(windows自带的版本太低,执行不了命令)
Db first 方式(区别于Code first和Model first)。
1、新建项目:
2、刚创建好项目可能会报异常,按异常提示导入System.Console即可。
3、导入EFCore访问Oracle数据库相关程序包(特别注意版本,稍微不一样就可能影响后续操作)如下:
(1)右键项目->管理NuGet程序包(注意:浏览下搜索【程序包全名】、勾上预发行版、版本、右边点击安装)
(4)导完三个程序包,接下来用NuGet程序包管理控制台(工具->NuGet包管理器->程序包管理控制台):
Scaffold-DbContext "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.128.238)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=EFTEST;Password=EFTEST;" Oracle.EntityFrameworkCore -OutputDir Models
在控制台中输入如上命令,回车即可将数据库中的表导入项目,导入成功后在项目中就能看的,自动生成了Models文件夹和两张表和上下文ModelContext:
然后在Program.cs文件中执行如下测试语句:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Models.ModelContext mc = new Models.ModelContext();
var x = mc.Test.ToList();
x.ForEach(t => Console.WriteLine(t.TestDesc + " " + t.TestId));
}
}
测试结果如下图:
到此为止,测试结束。
CURD测试:
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Models.ModelContext mc = new Models.ModelContext();
//var x = mc.Test.ToList();
//x.ForEach(t => Console.WriteLine(t.TestId + " " + t.TestDesc + " " + t.TestName));
//var blog = mc.Blogs.ToList();
//blog.ForEach(t => Console.WriteLine(t.Blogid + " " + t.Username));
var emp = new Models.Blogs
{
Blogid = 5,
Username = "IntraFactory999"
};
try
{
mc.Add(emp);
// mc.Update(emp);
mc.SaveChanges();
//Console.WriteLine("添加成功!");
var x = mc.Blogs.ToList();
x.ForEach(t => Console.WriteLine(t.Blogid + " " + t.Username));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
/* var emp = new Models.Test
{
TestId = "8",
TestName = "IntraFactory",
TestDesc = "intrafactory"
};
try
{
// mc.Add(emp);
mc.Remove(emp);
mc.SaveChanges();
//Console.WriteLine("添加成功!");
var x = mc.Test.ToList();
x.ForEach(t => Console.WriteLine(t.TestId + " " + t.TestDesc + " " + t.TestName));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}*/
}
项目连接数据库: