三种开发模式
ORM框架的对象关系映射
DataBase First (数据库优先,还没写代码)
Model First (模型优先edmx文件,数据库表未创建)
Code First (代码优先)
Sql Server安装:EntityFramework
Mysql安装:MySql.Data.Entity
数据库优先
选择ADO.NET实体对象,
来自数据库的EF设计器
导入数据库结构
模型优先
选择ADO.NET实体对象,创建edmx文件,需要安装vs数据库连接插件或者odbc驱动
mysql使用数据库连接字符串
空EF设计器
右键菜单中,验证有无错误,连接数据库生成表数据
确保表包含主键,否则edmx生成错误,不会自动生成表
添加代码生成项,创建模型DBContext代码
using (Model1Container mc = new Model1Container())
{
mc.BlogsSet.Add(new Blogs()
{
Id = 1,
Name = "hello",
Title = "world"
});
mc.SaveChanges();
}
代码优先
选择ADO.NET实体对象,
空的Code first设计器
或者自己添加cs代码
[Table("Blog")]
public class Blog
{
[Key]
public int BlogId { get; set; } //字段在数据库中不显示
[Required] //不为空
[[StringLength(128)]]
public string Title { get; set; }
public DateTime CreateDate { get; set; }
}
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class BlogEntities : DbContext
{
public BlogEntities():base("name=mysqltest") { } //mysqltest是app.config中的key name
public DbSet Blogs { get; set; }
}
创建数据库
using(BlogEntities blog = new BlogEntities())
{
blog.Blogs.Add(new Blog() {
BlogId = 1,
Title = "test",
CreateDate = DateTime.Now
});
blog.SaveChanges();
}
nuget添加EntityFramework后,配置文件App.config文件中配置数据库连接
不同的数据库,需要在nuget中搜索不同的ef,mysql和sqlserver的ef不同
添加连接字符串,数据库名mysql,codefirst数据库重复不创建
ef自动创建数据库和表,在已有数据库中需要创建结构一致的表(这个操作和code first违背)
找不到provider
注意version版本号
找不到加载的文件
可能原因,nutget导致csproj文件依赖丢失,添加上就可以了。
orm访问access
nuget安装EF框架:entityframeworkcore.jet
nuget安装provider驱动:JetEntityFrameworkProvider
添加引用
using System.ComponentModel.DataAnnotations;//为了后续说明主键[Key]
using EntityFrameworkCore.Jet;
using Microsoft.EntityFrameworkCore;
//重写DbContext的配置函数
public MyDbContext(): base(){}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//Microsoft.ACE.OLEDB.12.0或者Microsoft.Jet.OLEDB.4.0
optionsBuilder.UseJet(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\xxx\ConsoleApp1\data\d1.accdb;");
}
参考:https://blog.csdn.net/diaocang3578/article/details/101230788
sqlite
安装Microsoft.EntityFramework.Sqlite
private DataBaseSystem() : base()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=.\\DBFile\\" + DateTime.Now.ToString("yyyyMMdd") + ".db");
}
三种事务模式
SaveChanges,EF事务模式
DbContextTransaction,手动操作事务
TransactionScope,多数据库操作
entity
ms sql server:Microsoft.EntityFrameworkCore.SqlServer
sqlite:Microsoft.EntityFrameworkCore.Sqlite
mysql:MySql.Data.EntityFrameworkCore
access:EntityFrameworkCore.Jet
postgresql:Npgsql.EntityFrameworkCore.PostgreSQL
参考
https://www.cnblogs.com/1312mn/p/9239419.html
本文同步分享在 博客“怪力左手”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。