菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
471
0

Entity Framework

原创
05/13 14:22
阅读数 2465

什么是Entity Framework?

    ado.net entity framework 是微软以ado.net为基础所发展出来的 对象关系对象(O/R Mapping)解决方案

什么是ORM?

Entity Framework使用场景

各个版本

框架

开源地址:

http://entityframework.codeplex.com/

安装

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 List<Post> Posts { 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 DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> 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<Blog>().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 用于数据库已经存在的情况

如何选择呢

发表评论

0/200
471 点赞
0 评论
收藏