zoukankan      html  css  js  c++  java
  • Linq基础知识小记四之操作EF

    1、EF简介

    EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Data Model,这提供了额外的灵活性,但在性能和简单性上面也会有所损失.

    EF的优点:在数据库架构和实体类之间的映射提供了更好的灵活性,还通过程序支持除了SqlServer之外的数据库.

    Linq To Sql之于EF

    Linq To Sql和EF师出同门,EF支持LINQ to SQL几乎同样的查询功能,所以在使用Linq To Sql学到的查询技术同样适用于EF,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能.

    2、EF实体类

    EF允许我们使用任何类来表示数据(但是必须实现特定的接口来实现如导航属性等的功能),如下面的EF实体类Customer类,他被映射到了数据库中的Customer表

      public partial class Customer
        {
            [EdmScalarProperty(EntityKeyProperty = true, IsNullable = false)]
            public int Id { get; set; }
    
            [EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
            public string Name { get; set; }
        }
    
        public partial class Customer
        {
            [Key]
            public int Id { get; set; }
    
            [Required,StringLength(30)]
            public string Name { get; set; }
        }

    两中表示方法都可以,但是引用的命名空间并不相同,具体的关于跟多的属性配置细节请参考EF CodeFirst 约束配置

    注:上面的单个类并不能单独的使用,因为我们在使用EF时,并不是直接查询数据库,而是查询一个更高层的模型,该模型叫做Entity Data Model(EDM),所以我们需要莫种方法来描述EDM,EDM通常是由一个以.edmx为扩展名的xml文件来描述的,它包含了以下三个部分

    • 概念模型,用来描述EDM并且和数据库完全隔离
    • 存储模型,用来描述数据库架构
    • 映射规范,用来描述概念模型如何映射到存储模型

    这个在我的EF基础知识小记一也有介绍.

    创建一个edmx最简单的方法就是在Visual Studio中添加一个”ADO.NET Entity Data Model” 项目,然后就是根据提示来安装.这种方法不但生成了.edmx文件,还为我们生成实体类,EF中的实体类对应EDM中的概念模型.MS提供了一个可视化工具来帮助我们生成EDM.通过设计器我们可以任意的设计EDM中表和实体间的关系,当然也可以通过改写.edmx文件来调整我们EDM,通过设计器和修改edmx我们可以完成一下功能:

    1、映射一个表到多个实体

    2、映射多个表到一个实体

    3、通过ORM领域流行的三种标准策略来映射继承的类型

    的三种标准策略包括:

    表到层次类型:单个表映射到一个完整的类继承层次结构,表中的一个类型辨别列用来指示每一行数据应该映射到何种类型.

    表到类型:单个表映射到单个类型,这意味这继承类型会被映射到多个表,当我们查询一个类似的entity时,EF通过连接(Join)来合并所有的基类型.(联结查询)

    表到具体类型:单独的表映射到每个具体的类型,这意味着一个基类型将会被映射到多个表,当我们查询entity时,EF通过生成UNION(联结)来合并数据.

  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/7607879.html
Copyright © 2011-2022 走看看