Entity Framework 学习笔记

1、自定义数据库链接字符串上下文

 public class PetDbContext : DbContext
    {
        public PetDbContext()
            : base("name=DemoDB")
        {
        }
        public DbSet<Dog> Dogs { get; set; }
    }

2、Code First 模型迁移相关命令

Enable-Migrations 启用模型迁移,会自动建立Migrations文件夹,里面记录模型修改历史
Add-Migration AddType ,模型添加字段Type后,执行该命令,会生成模型修改历史
Update-Database  将模型的修改应用到数据库中

3、EF 支持的完整注释列表为

4、Entity Framework数据库初始化方式

  Entity Framework通过Database.SetInitializer来指定需要的数据库初始化方式,Database.SetInitializer可指定的数据库共有3种:

  1>. CreateDatabaseIfNotExists

  CreateDatabaseIfNotExists是Database.SetInitializer指定数据库的默认方式,用于当数据库不存在时,自动创建数据库。由于该方式是默认方式,所以可以不需要任何代码进行指定,当然也可以使用代码来明确的指定。

Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
  2>. DropCreateDatabaseWhenModelChanges

  DropCreateDatabaseWhenModelChanges用于当数据模型发生改变时,先删除原数据库,后创建新的数据库。

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
  3>. DropCreateDatabaseAlways

  DropCreateDatabaseAlways用于每次均先删除原数据库再创建新的数据库,不管数据模型是否发生改变。

Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
  但是,在很多时候,我们希望即使在Entity Framework Code First与数据库不匹配时,宁可Entity Framework Code First报出数据库连接错误,而不希望对数据库进行任何的删除创建操作。Entity Framework Code First提供关闭数据库初始化操作:

Database.SetInitializer<PetDbContext>(null);

代码示例:

public class PetDbContext : DbContext
    {
        static PetDbContext()
        {
            Database.SetInitializer<PetDbContext>(null);
            //Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
            //Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
            //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
        }
        public PetDbContext()
            : base("name=DemoDB")
        {
        }
        public DbSet<Dog> Dogs { get; set; }
    }

5、使用ER进行CRUD操作

实体定义

 public class Dog
    {
        public int? Age { get; set; }
        public Guid Id { get; set; }
        public string Name { get; set; }
        public float? Weight { get; set; }
        public int Type { get; set; }
        public DateTime BirthDay { get; set; }
        public string Address { get; set; }
    } 

新增:

using (PetDbContext db = new PetDbContext())
            {
var dog = new Dog { Id = Guid.NewGuid(), Name = "杨贵妃", Age = 4,Type=6,BirthDay=DateTime.Now }; db.Dogs.Add(dog); int cnt = db.SaveChanges();}

根据ID读取与更新:

using (PetDbContext db = new PetDbContext())
            {
var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551"))); if(dog!=null){dog.BirthDay = DateTime.Now; int cnt = db.SaveChanges();}}

删除记录:

 using (PetDbContext db = new PetDbContext())
            {

                var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551")));

              if(dog!=null){
                db.Dogs.Remove(dog);

                int cnt = db.SaveChanges();}
            }

参考:

https://msdn.microsoft.com/en-us/data/jj200620
https://msdn.microsoft.com/zh-cn/data/ee712907

时间: 2024-08-10 23:30:19

Entity Framework 学习笔记的相关文章

Entity Framework 学习笔记(2)

上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// Context相当于一个数据库 /// </summary> public class MusicContext : DbContext { //base("LocalDB")表示要用到config文件中的名为"LcoalDB"的连接字符串 public

ADO.NET Entity Framework学习笔记(3)ObjectContext

ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject 添加实体 将实体添加到集合中, 创建实体时,状态为EntityState.Detached 当调用AddObject将实体添加到Context时,状态为EntityState.Added myContext context = new myContext(); myTab r = new myTab(

Entity Framework学习笔记——edmx文件

上文简单介绍了一下Entity FrameWork,这里说一下EF的核心--edmx文件. 在VisualStudio中建立edmx文件(此例环境为VisualStudio2012) 1.新建-ADO.NET实体数据模型: 2.选择数据模型时,因为我之前已经在数据库中建立好表了,所以我们这里先选择从数据库生成(即DB First),如果选择空模型,就可以在没有建立数据库的情况下,通过先建立实体模型来生成实体类和数据库表. 3.选择数据库连接 4.选择或设置好连接的服务器.验证信息.数据库名: 5

Entity Framework 学习笔记(1)

from:http://www.cnblogs.com/Richeir/p/5347000.html 开始从头系统地学习Entity Framework,当前的稳定版本为6.1.3,Nuget主页 http://www.nuget.org/packages/EntityFramework/ 微软喜欢把Entity Framework和ASP.NET MVC放在一起来用,从Entity Framework的主页的所有者就可以看出来 当然,这两者也是紧密的结合在一起的,“新一代”Web开发框架和“新

Entity Framework 学习笔记(一)之数据模型 数据库

关于Entity Framework  数据模型 的开发有三种模式:1.引用数据库方式:2.在VS中新建EF空模型Model 方式:3.Code 方式 Entity Framework  数据模型  引用"引用数据库方式"进行开发创建的使用,具体如下: 开发环境:VS2012 数据库:SQL Server 2008 Entity Framework  版本:6.12 1.新建数据库 在数据库中新建数据库,并创建数据表,以下截图只供参考: 2.新建项目 在VS中新建一个控制台应用程序 F

Entity Framework 学习笔记(二)之数据模型 Model 使用过程

欢迎大家加入我们:ASP.NET交流群(1群) ExtJs4.2交流群(3群) 97869295 Entity Framework  数据模型 Model 创建的使用: 开发环境:VS2012 数据库:SQL Server 2008 Entity Framework  版本:6.12 下面是新建的项目架构:(当然这是我的项目架构,只是参考) 1. 新建项目 新建一个控制台项目即可 :Future.LifeWillBetter.DAL.ForModel.ConsoleApplication 如图:

Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)

Entity Framework是以ADO.NET为基础,面向数据的"实体框架".以下简称EF. 它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问. 个人认为百科上对EF一句比较经典的解释为:让上层的应用程序码可以如面向对象的方式般访问数据. 过去我们对数据库都是直接

【.NET-EF】Entity Framework 学习笔记5:懒人的Linqer

真的没有做不到,只有你想不到,当苦恼Linq写法很别扭,一点不像SQL(写SQL写习惯了),就想到有没一个工具可以把SQL语句转成Linq语句,然后就搜到了这个工具:Linqer. 很简单的工具(越简单越好),网上搜索下一下,打开来(有些要安装,我这个不用),连下数据库,再点Generate to LinQ找个地方给它放,就可以开始是使用. 对于刚刚学习,和转不过弯的我有很好的帮助.(谢谢作者大神)

【.NET-EF】Entity Framework 学习笔记4:优点和缺点

EF,简单说将数据库的表生成实体类,每个结果都是实体类集(类型如IList<>,IQueryable<>),增删改查方法封装好了,直接操作,节省了去数据库工具写语句. EF5.0后有了延时执行,其实就是IQueryable<>和SaveChange(),意思就是你大可以将语句分几段写,最后才一次生成. EF是ORM框架(对象关系映射)的,在之前写的程序,我也经常自己去把数据库的表生成个实体类,方便开发,这框架更方便,封装好增删改查. 基于ADO.NET,会自动生成SQL