什么是Entity Framework?
ado.net entity framework 是微软以ado.net为基础所发展出来的 对象关系对象(O/R Mapping)解决方案
什么是ORM?
Entity Framework使用场景
各个版本
框架
开源地址:
安装
db first
创建数据模型
DBContext
dbset 对应数据库的表
增删改查 缓存
public ActionResult Index() { using (var dbc = new DBModel.SchoolEntities()) { var objectContext = (dbc as IObjectContextAdapter).ObjectContext; }; return View(); }
上下文.dbset.FirstOrDefault<dbset>(); 返回第一条记录或者默认值
上下文.dbset.Remove() 删除
必须当SavaChange()是执行数据库操作
Code First
数据库类:
blog:
public class Blog { public int BlogID { get; set; } public string BlogName { set; get; } public virtual ListPosts { get; set; } }
Post
public class Post { public int PostID { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogID { get; set; } public virtual Blog Bolg { get; set; } }
dbcontext
public class BlogingContext : DbContext { public DbSetBlogs { get; set; } public DbSet Posts { get; set; } }
代码
using (var dbc = new CodeFirst.BlogingContext()) { dbc.Blogs.Add(new CodeFirst.Blog { BlogID = 1, BlogName = "qiaowen" }); dbc.SaveChanges(); //保存在哪里了呢 dbcontext首先找这台计算机上有没有sql dbcontext express instance 的实例,如果找不到sqlexpress的实例那么就会去找localdb的实例 }
Code First Migration
数据库迁移(ef 6.1.2)
控制台执行命令
Enable-Migrations
blog 类添加个新属性 BlogUrl
执行命令add-migration
这是发现 数据库 并没有更新 因为我们需要更新一下数据库
命令:update-database
不要手动升级数据库
如果要手动升级数据库
dbcontext类修改
migration config修改
Data Annotation
修改字段条件(比如字段长度)
引用
using System.ComponentModel.DataAnnotations;
代码
[StringLength(50)]
public string BlogName { set; get; }通过Migration 更新数据库
也可以通过
Fluent API
修改数据库字段名 条件等
代码(在数据库上下文)
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().Property(b => b.BlogUrl).HasColumnName("urladdress"); }
使用code first 连接已有的数据库
具体操作也是一样
using (var dbc = new CodeFirstFromDB()) { dbc.Blogs.Add(new Blogs { BlogName = "ExistBlogName" }); dbc.SaveChanges(); }
Model First
先设计数据模型 ,然后通过数据模型生成entityFramework类 和 数据库
通过右键新增实体和关系(1对1 1对多 多对多)
生成数据库
模式的选择
codefirst 既可以创建新的数据库也可以连接一个已经存在的数据库
model first 先创建数据模型 然后生成entity Class 和数据库 用于数据库还不存在的情况
dbfirst 用于数据库已经存在的情况
如何选择呢