最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Entity Framework使用LINQ操作實(shí)體

 更新時(shí)間:2022年03月05日 11:27:19   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
本文詳細(xì)講解了Entity Framework使用LINQ操作實(shí)體的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、什么是LINQ TO Entities

LINQ,全稱是Language-INtegrated Query(集成語(yǔ)言查詢),是.NET語(yǔ)言中查詢數(shù)據(jù)的一種技術(shù)。LINQ to Entities是一種機(jī)制,它促進(jìn)了使用LINQ對(duì)概念模型的查詢。

因?yàn)長(zhǎng)INQ是聲明式語(yǔ)言,它讓我們聚焦于我們需要什么數(shù)據(jù)而不是應(yīng)該如何檢索數(shù)據(jù)。LINQ to Entities在實(shí)體數(shù)據(jù)模型之上提供了一個(gè)很好的抽象,所以我們可以使用LINQ來(lái)指定檢索什么數(shù)據(jù),然后LINQ to Entities provider會(huì)處理訪問(wèn)數(shù)據(jù)庫(kù)事宜,并為我們?nèi)〉奖匾臄?shù)據(jù)。

二、LINQ to Entities執(zhí)行流程

當(dāng)我們使用LINQ to Entities對(duì)實(shí)體數(shù)據(jù)模型執(zhí)行LINQ查詢時(shí),這些LINQ查詢會(huì)首先被編譯以決定我們需要獲取什么數(shù)據(jù),然后執(zhí)行編譯后的語(yǔ)句,從應(yīng)用程序的角度看,最終會(huì)返回.NET理解的CLR對(duì)象。

上圖展示了LINQ to Entities依賴EntityClient才能夠使用EF的概念數(shù)據(jù)模型

執(zhí)行流程:

1、應(yīng)用程序創(chuàng)建一個(gè)LINQ查詢。
2、LINQ to Entities會(huì)將該LINQ查詢轉(zhuǎn)換成EntityClient命令。
3、EntityClient命令然后使用EF和實(shí)體數(shù)據(jù)模型將這些命令轉(zhuǎn)換成SQL查詢。
4、然后會(huì)使用底層的ADO.NET provider將該SQL查詢傳入數(shù)據(jù)庫(kù)。
5、該查詢?nèi)缓笤跀?shù)據(jù)庫(kù)中執(zhí)行。
6、執(zhí)行結(jié)果返回給EF。
7、EF然后將返回的結(jié)果轉(zhuǎn)換成CLR類型,比如領(lǐng)域?qū)嶓w。
8、EntityClient使用項(xiàng)目,并返回必要的結(jié)果給應(yīng)用程序。

三、使用LINQ to Entities操作實(shí)體

使用LINQ查詢的方式有兩種:
1、查詢語(yǔ)法。
2、方法語(yǔ)法。

選擇哪種語(yǔ)法完全取決于你的習(xí)慣,兩種語(yǔ)法的性能是一樣的。查詢語(yǔ)法相對(duì)更容易理解,但是靈活性稍差;相反,方法語(yǔ)法理解起來(lái)有點(diǎn)困難,但是提供了更強(qiáng)大的靈活性。使用方法語(yǔ)法可以進(jìn)行鏈接多個(gè)查詢,因此在單個(gè)語(yǔ)句中可以實(shí)現(xiàn)最大的結(jié)果。

下面以一個(gè)簡(jiǎn)單的例子來(lái)理解一下這兩種方法的區(qū)別。創(chuàng)建一個(gè)控制臺(tái)程序,并命名。

1、定義領(lǐng)域?qū)嶓w:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQDemo.Model
{
    public class Book
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public string Author { get; set; }

        public DateTime PublicationDate { get; set; }
    }
}

2、定義初始化器,并寫(xiě)入初始化數(shù)據(jù)

using LINQDemo.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQDemo.EF
{
    public class SeedingDataInitializer : DropCreateDatabaseAlways<Context>
    {
        /// <summary>
        /// 初始化種子數(shù)據(jù)
        /// </summary>
        /// <param name="context"></param>
        protected override void Seed(Context context)
        {
            context.Books.Add(new Book { Name = "C#高級(jí)編程(第十版)", Author = "小明", PublicationDate = Convert.ToDateTime("2017-12-11 12:12:45") });
            context.Books.Add(new Book { Name = "oracle從入門到精通", Author = "張三", PublicationDate = Convert.ToDateTime("2015-12-11 12:12:45") });
            context.Books.Add(new Book { Name = "JavaScript高級(jí)編程", Author = "李四", PublicationDate = Convert.ToDateTime("2011-09-11 12:12:45") });
            base.Seed(context);
        }
    }
}

3、定義數(shù)據(jù)庫(kù)上下文類

using LINQDemo.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQDemo.EF
{
    public class Context :DbContext
    {
        public Context()
            : base("AppConnection")
        {
            Database.SetInitializer<Context>(new SeedingDataInitializer());
        }

        // 添加到數(shù)據(jù)上下文
        public virtual DbSet<Book> Books { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // 設(shè)置生成的表名:Book
            modelBuilder.Entity<Book>().ToTable("Book");
            base.OnModelCreating(modelBuilder);
        }
    }
}

4、Main函數(shù)定義如下:

using LINQDemo.EF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new Context())
            {
                #region   查詢語(yǔ)法
                var result = from p in context.Books where p.Name.Equals("JavaScript高級(jí)編程") select p;
                #endregion

                #region 方法語(yǔ)法
                var books = context.Books.Where(p => p.Name.Equals("JavaScript高級(jí)編程"));

                foreach (var item in books)
                {
                    Console.WriteLine(string.Format("書(shū)名:{0},作者:{1},發(fā)布時(shí)間:{2}", item.Name, item.Author, item.PublicationDate));
                }
                #endregion
            }

            Console.WriteLine("完成");
            Console.ReadKey();
        }
    }
}

5、運(yùn)行程序,查看結(jié)果

查看數(shù)據(jù)庫(kù)結(jié)果:

查詢語(yǔ)法和方法語(yǔ)法的執(zhí)行結(jié)果都是一樣的。

重點(diǎn)理解:

當(dāng)使用LINQ to Entities時(shí),理解何時(shí)使用IEnumerable和IQueryable很重要。如果使用了IEnumerable,查詢會(huì)立即執(zhí)行,如果使用了IQueryable,直到應(yīng)用程序請(qǐng)求查詢結(jié)果的枚舉時(shí)才會(huì)執(zhí)行查詢,也就是查詢延遲執(zhí)行了,延遲到的時(shí)間點(diǎn)是枚舉查詢結(jié)果時(shí)。

如何決定使用IEnumerable還是IQueryable呢?使用IQueryable會(huì)讓你有機(jī)會(huì)創(chuàng)建一個(gè)使用多條語(yǔ)句的復(fù)雜LINQ查詢,而不需要每條查詢語(yǔ)句都對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢。該查詢只有在最終的LINQ查詢要求枚舉時(shí)才會(huì)執(zhí)行。

到此這篇關(guān)于Entity Framework使用LINQ操作實(shí)體的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • a.sp.net清除ListBox的列表項(xiàng)(刪除所有項(xiàng)目)

    a.sp.net清除ListBox的列表項(xiàng)(刪除所有項(xiàng)目)

    在網(wǎng)上搜索相關(guān)資料,相當(dāng)多用戶有相同要求,一次移除ListBox的列表所有項(xiàng)
    2012-01-01
  • asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法

    asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法

    這篇文章主要介紹了asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法,涉及asp.net針對(duì)文件與目錄的遍歷及刪除操作實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • ASP.NET主機(jī)資源控制的一些心得

    ASP.NET主機(jī)資源控制的一些心得

    您可以通過(guò)以下設(shè)置控制ASP.NET主機(jī)對(duì)服務(wù)器內(nèi)存的占用。并能設(shè)置ASP.NET主機(jī)進(jìn)程定時(shí)重建這樣可以避免服務(wù)器長(zhǎng)時(shí)間運(yùn)行aspnet占用大量空閑內(nèi)存,有利于提高aspnet運(yùn)行效率。
    2013-02-02
  • 詳解ASP.NET Core實(shí)現(xiàn)強(qiáng)類型Configuration讀取配置數(shù)據(jù)

    詳解ASP.NET Core實(shí)現(xiàn)強(qiáng)類型Configuration讀取配置數(shù)據(jù)

    本篇文章主要介紹了詳解ASP.NET Core實(shí)現(xiàn)強(qiáng)類型Configuration讀取配置數(shù)據(jù) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Win7安裝Visual Studio 2015失敗的解決方法

    Win7安裝Visual Studio 2015失敗的解決方法

    這篇文章主要為大家詳細(xì)介紹了Win7安裝Visual Studio 2015失敗的解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法

    詳解MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法

    這篇文章主要介紹了詳解MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • ASP.NET 2.0 程序安全的基礎(chǔ)知識(shí)

    ASP.NET 2.0 程序安全的基礎(chǔ)知識(shí)

    成員關(guān)系的概念在人類社會(huì)中是一個(gè)層次比較低的概念,源于希望屬于某個(gè)群組的意識(shí)。同樣,在ASP.NET 2.0程序開(kāi)始開(kāi)發(fā)涉及到成員關(guān)系的應(yīng)用程序時(shí),必須首先理解身份、驗(yàn)證和授權(quán)這幾個(gè)關(guān)鍵的概念。
    2010-04-04
  • .Net Core 之 Ubuntu 14.04 部署過(guò)程(圖文詳解)

    .Net Core 之 Ubuntu 14.04 部署過(guò)程(圖文詳解)

    本篇文章主要介紹了.Net Core 之 Ubuntu 14.04 部署過(guò)程(圖文詳解),有興趣的可以了解一下。
    2016-11-11
  • .Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作

    .Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作

    這篇文章主要介紹了.Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • LINQ教程之LINQ操作語(yǔ)法

    LINQ教程之LINQ操作語(yǔ)法

    本文詳細(xì)講解了LINQ的操作語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

武定县| 清原| 湖口县| 巴楚县| 临泽县| 普格县| 栖霞市| 香港| 镇康县| 崇信县| 昌都县| 仁布县| 花垣县| 松阳县| 贵州省| 长岭县| 石首市| 卓资县| 湘潭市| 滨海县| 彭水| 巫溪县| 浑源县| 安泽县| 从化市| 奉节县| 招远市| 疏附县| 鲁甸县| 济宁市| 东兰县| 屏东市| 河东区| 灵川县| 左云县| 新闻| 库伦旗| 泾川县| 东方市| 文成县| 江安县|