`
wx1568444409
  • 浏览: 14568 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Entity Framework基础01

 
阅读更多

学习了ADO.NET的相关知识,掌握了它对数据库表的基本操作,但是实际在开发项目应用中微软为我们开发ef这个ORM,使用它可以很方便的利用ADO.NET来操作DBMS,使得我们开发项目的着重点放在业务逻辑层上面,从而轻数据库的设计。

一:Entity Framework

1 解释

  *ef说白了就是对ADO.NET的包装,它可以将数据库中的数据变成实体的模型,也可以将模型变成为数据库中的表,很是方便。

  *ef里面重要的就是数据上下文。它是生成数据查询语句的关键。结果实际返回的是IQueryable对象的子类对象,此时返回的DbQuery<T>支持“延迟加载”只有当使用数据库进行查询的时候才会进行数据库的直接查询。

  *ef是可以跨数据库的,但是一般情况下我们建大型商城的话不会使用ef的ORM进行,因为它将命令转换为ADO.NET比较慢,一些小型的网站会使用。

2 查询方式分为两种,

  0.1:使用SQO(标准查询运算符)进行查询,只是这种查询的结果将来在使用的时候要将返回的DbQuery转回为List<>集合,这样子将来在界面上面好做处理,直接foreach就可以。

//var query = db.Articles.Where(d => d.Title == "我知道你一直在");

//List<Models.Article> list = db.Articles.Where(d => d.Title == "我知道你一直在").ToList();

  0.2:使用Linq语句来查询,使用它的好处就是方便编程,其实说到底.net编译器将Linq语句将来也编译为SQO语句进行数

据库的CRUD操作。第二种方式:使用LINQ语句来查询,所有的查询结果,linq只是为了方便程序的编写才出现的,在编译的时候还是编译为上面的第一种方式进行查询。

//IQueryable<Models.Article> query = from d in db.Articles where d.Title == "我知道你一直在" select d;

//List<Models.Article> list = (from d in db.Articles where d.Title == "我知道你一直在" select d).ToList();

3:创建数据上下文

public partial class ABlogContainer : DbContext
    {
        public ABlogContainer()
            : base("name=ABlogContainer")
        {
        }
    }

4 通过ef如何删除数据库中的数据,在前面提前创建数据上下文db.通过5步来实现删除

   0.1:创建类的删除对象   <也就是new一个对象>

   0.2:将类的对象添加到ef管理容器

   0.3:更改ef管理容器的类的状态,实现删除就是将其状态位改为删除

   0.4:保存更改

代码:<1步---5步>

var db=new Ylxy_TwdcDevEntities(); //创建数据上下文

var modelDel=new Articl(){Id=id};   //创建类的删除对象

db.Articles.Attach(modelDel); //将其添加到ef的管理容器

db.Aritcles.Remove(modelDel);//更改其状态位

db.SaveChanges();             //保存数据库的操作。

5 通过ef如何修改数据库中的数据,创建数据库db,执行下面5步

   1.1:将实体对象加入到ef管理容器,获取其伪包装类。

   1.2:将包装类对象的状态设置为unchange;

   1.3:设置被改变的属性

   1.4:保存更改。

   1.5:跳转页面。

对应代码:

DbEntityEntry<Article> entity=db.Entry<Aritcle>(model);

   entity.State=Entity.State.Unchange;

   entity.Property(x=>x.Title).IsModified=true;
  
   entity.Property(x=>x.Content).IsModified=true;

   entity.Property(x=>x.Author).IsModified=true;

   db.SaveChanges();

   Return RedirectToAction(“Index”,”Home”);

6 自动属性

  就是在设置属性的时候不需要提前设置属性的值,就是自动属性;

7 隐式类型var和dynameic类型

  var就是提前强类型确定好的类型,而dynameic类型就是在运行时确定类型的,对于内存是动态分配内存,属于弱类型。var编译时进行类型推断,在编译阶段得到实际类型,dynamic编译时不进行判断,运行时才判断。

  *一般做项目的时候最好将每个方法的无参构造方法,写泛型集合。

  *委托就是一种类型,是在方法类型上面的。有了委托就可以将方法当为参数进行传递。

8 ORM是什么

它是一种实体关系数据模型,是一种框架集。

9 ef里面的查询语句,这里面使用的是linq to entity 来进行查询的。

  *用lambda表达式进行分页查询

/// <summary>
        /// 分页查询
        /// </summary>
        /// <typeparam name="TKey">按列进行查询</typeparam>
        /// <param name="whereLamdba">条件lamdba</param>
        /// <param name="orderLamdba">按什么顺序</param>
        /// <param name="pageSize">页面大小</param>
        /// <param name="pageIndex">页面个数</param>
        /// <returns></returns>
        public IQueryable<T> GetPageList<TKey>(Expression<Func<T, bool>> whereLamdba, Expression<Func<T, TKey>> orderLamdba,
            int pageSize, int pageIndex)
        {
            return dbcontext.Set<T>().Where(whereLamdba)
                .OrderBy(orderLamdba)
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize);
        }

10 有关延迟加载的问题<导航属性就是数据库中表的关联>

   一般情况下我们使用ef的时候不是直接进行数据库的查询的,首先是进行拼接,将其命令保存到表达式的一个二叉树形式,等将查询语句执行完之后在进入数据库中进行查询,而使用查询返回的值是个标量的时候就不会进行延迟加载,比如

count(),First,ToList()等具体的值的时候。当返回的值是一个集合的时候会进行延迟加载。

    导航属性的延迟加载:导航属性默认有延迟加载,每当使用导航属性的时候就会进行延迟加载。

11 IQueryable<>和IEnumerable<>的区别

一般会出现延迟加载的是IQueryable<>,因为它是拼接命令,之后才到数据库中执行,而IEnumerable<>是直接执行,比如查询一些连续的命令后者是比较费时的,一步一步的去执行。会出现这样的原因是由于IQueryable<>继承了IEnumberable<>接口,并且新增了Experssion属性,这个属性就会进行命令的拼接。

wpsF01E.tmp

二:数据库的创建技术

1 Model First

   通过模型来新建数据库,主要是每个表之间关系的联系很重要。

   数据库中的外键是数据库的一种约束,不是表之间关联的条件。

   表之间的关系是数据库设计人员通过分析数据得来的,是通过设置外键来实现的。外键是一个表添加别表主键的操作。

2 Code First

1:引入类库

2:添加上下文类

3:维护原有模型<引入每个标签的命名空间>

    *添加模型中类映射到数据库中的表[Table(“表名”)]

    *添加主键<key>,外键<ForeignKey(“导航属性”)>,添加导航属性<Virtual,注意表之间关联的类型,一对一,一对多,多对多。每个都不一样注意区分>

[注意]:在写表关系的时候外键(别表的Id)写在“一对多”多的那张表中,在“一”的表中导航属性必须把“多”表写成

集合(ICollection)<>集合。

3 数据库的连接

<connectionStrings>

    <add name="ABlogContainer" connectionString="Data Source=(Local);Initial Catalog=DemoDb;User Id=sa;Password=1q2w3e4R" providerName="System.Data.SqlClient"/>

  </connectionStrings>

4 数据槽与封装数据上下文方法

  *数据槽是一个集合对象,是存储于堆区的。对于ef里面的上下文我们将进行封装,让存储在其数据槽中,这样在大的项目里面不用每次new数据上下文。

  *工厂模型是用来封装对象的代码,对于数据上下文我们可以采用其封装上下文,将其放在数据槽里面这样子对于内存是一种节约。

  *数据上下文的第二种方法,我们上面的短文中提到了将数据上下文封装到一个方法里,调用数据槽的功能,来实现GC数据上下文的清理。而现在还有一种比较好的方法就是使用using(){}来实现。

Eg:using(var context=new EFContext()){}

 原因:一般我们new一个对象,这个对象长时间没有被使用就会在一段时间之后被GC清理掉,要是我们的项目比较大,那么GC就不知道什么时候才会来清理它,这样子就造成了资源的浪费。DbContext上下文对象的实例占据着数据库的连接,我们希望它不在使用的时候就将其回收掉,using(){}语句有很多好处,第一,当我们执行完using(){}代码块时,上下文中的Dispose()方法会被调用,因为DbContext上下文实现论文IDisposable<>接口,该方法将关闭数据库的连接,清理掉任何需要被释放的资源。这将进一步创建健壮的代码。

5 取数据到内存里面

   如果希望将数据直接加载到内存中,可以使用ToList返回一个List<T>对象

三:ef里面的数据迁移 

《模型发生更改数据库没变》

  Ef的数据迁移是通过NuGet来进行的,在程序包管理器控制台里面输入”get-help EntityFramework”命令,可以获取很多帮助。

  Enable-migrations[-Force]  :开始进行数据迁移的准备工作

  Add-Migration            :添加模型,更新到数据库中。

  Update-Database          :更新数据库

  Get-Migration            :从数据库里面得到模型 

我们在使用的时候要将默认项目放在Model这个文件下面,这样我们才能执行ef里面的数据迁移。还有就是有的时候我们还需要更改代码里面Configuration.cs文件。

namespace ABlog_Model.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<ABlog_Model.ABlogContainer>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(ABlog_Model.ABlogContainer context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
    }
}

上面的AutomaticMigrationsEnabled = false; 这是我们将数据迁移设置为手动模式,一般我们设置为自动的。

AutomaticMigrationsEnabled = true;

附件:数据迁移知识参考   http://www.cnblogs.com/webabcd/archive/2012/05/30/2525047.html#top

转载于:https://my.oschina.net/Andyahui/blog/611593

分享到:
评论

相关推荐

    entity framework 基础介绍

    entity framework 基础介绍

    Entity Framework基础语法

    "Entity Framework基础语法" Entity Framework 是一个基于 C# 的数据访问技术,提供了强大的数据访问功能。本文档将详细介绍 Entity Framework 的基础语法,包括 Entity 的增删改查四大操作。 初始工作 在使用 ...

    Entity Framework官方中文教程

    Entity Framework Core(EF Core)是该框架的一个轻量级、可扩展且支持跨平台的版本,它继承了Entity Framework的核心功能,并在其基础上进行优化和创新。 Entity Framework官方中文教程详细地介绍了Entity ...

    Entity Framework 4 In Action

    ### Entity Framework 4 In Action:全面解析与应用实践 #### 一、书籍概述与背景介绍 《Entity Framework 4 In Action》是一本深入探讨Entity Framework 4(简称EF4)的权威指南,由Stefano Mostarda、Marco De ...

    ADO.NET EntityFramework 完整版教程(从初级到高级)

    ### ADO.NET Entity Framework 教程知识点概览 #### 一、Entity Framework 概述 - **背景**:Entity Framework (EF) 是 Microsoft 推出的一款 ORM (Object Relational Mapping) 工具,旨在简化数据访问层的开发,...

    Entity Framework orm教程

    1. EntityFrameworkCore(EFCore)与EntityFramework6(EF6)的对比: - EFCore是轻量级、可扩展和跨平台的版本,专注于支持.NET Core项目。 - EF6是一个经过长时间测试的数据访问技术,功能丰富且稳定性较高。 -...

    EntityFramework4.1安装包

    ADO.NET 是 .NET Framework 中用于数据库访问的基础组件,它提供了一组用于连接、查询和更新数据的类。然而,虽然 ADO.NET 提供了低级别的数据库访问能力,但它需要开发者编写大量的代码来实现对象与数据库之间的...

    entity framework 教程下载

    下载的"entity教程下载.txt"可能包含了Entity Framework的详细教程,涵盖基础概念到高级技巧,对于初学者和进阶者都是宝贵的参考资料。在学习过程中,配合官方文档、在线教程、示例代码和社区问答,可以更深入地理解...

    Entity Framework 6 Recipes,最新资料

    第一章介绍了Entity Framework的基础知识,帮助读者入门。各个章节接下来的内容都围绕着Entity Framework的实际应用,提供了可直接应用到实际项目中的代码示例和解决方案。 为了方便读者查阅,出版社将一些前面部分...

    EntityFramework6.1.3源码

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service ...

    ado.net entity framework extension

    1. **Entity Framework基础**:Entity Framework的核心概念包括实体(Entities)、实体数据模型(EDM)、上下文(DbContext)和数据库迁移(Database Migrations)。实体对应数据库中的表,EDM是应用程序和数据库...

    EntityFramework.dll

    EntityFramework.dll是微软开发的一个强大的对象关系映射(ORM)框架,它允许.NET开发者使用.NET语言(如C#或VB.NET)来操作数据库,而无需编写大量的SQL代码。这个库的核心在于它提供了一种抽象层,将应用程序的...

    Entity Framework 4 in Action

    - **章节概述**:这部分内容主要介绍了Entity Framework 3的基础知识,并引导读者了解如何开始使用Entity Framework 3进行数据访问。 - **关键知识点**: - 数据访问重装:介绍Entity Framework 3相较于前代产品的...

    Entity Framework教程资源

    在“EFBasicTutorials”这个压缩包中,我们可以期待一系列关于Entity Framework基础知识的教程。这些教程可能会涵盖以下关键知识点: 1. **安装与设置**:讲解如何在项目中安装Entity Framework,通常通过NuGet包...

    Entity Framework资料大全+实例

    这个“Entity Framework资料大全+实例”压缩包很可能包含了一系列关于EF的基础知识、进阶教程、实战案例和示例代码,旨在帮助开发者深入理解和熟练应用这个强大的工具。 1. **基本概念**:Entity Framework的核心...

    EntityFramework.6.0.0

    EntityFramework(EF)是Microsoft开发的一个开源对象关系映射(ORM)框架,它为.NET开发者提供了在.NET应用程序中操作数据库的强大工具。标题"EntityFramework.6.0.0"表明我们正在讨论的是EF的第6个主要版本。ORM...

    EntityFramework 4.3

    文件`EntityFramework.dll`是Entity Framework 4.3的核心库,包含了所有必要的类和方法,而`EntityFramework.xml`则是相关的XML文档,包含了库中类和方法的详细说明,有助于开发者进行API参考和调试。 总之,Entity...

    Entity Framework 教程

    预备知识部分涵盖了学习Entity Framework之前需要了解的一些基础知识,主要包括以下几点: 1. **LINQ技术**:这是.NET 3.5中引入的一项新技术,它扩展了.NET平台上的编程语言,使开发者能够更方便地进行数据查询。 ...

    EntityFramework 帮助文档

    EntityFramework(简称EF)是一个流行的.NET框架,用于数据访问。它支持两种主要的数据建模方法:Code First和Model First,以及多种数据库操作技术。EF帮助文档为开发者提供了全面的指导,涵盖了从入门到高级应用的...

Global site tag (gtag.js) - Google Analytics