欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Entity Framework使用LINQ操作實體

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

一、什么是LINQ TO Entities

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

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

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

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

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

執(zhí)行流程:

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

三、使用LINQ to Entities操作實體

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

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

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

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、定義初始化器,并寫入初始化數(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#高級編程(第十版)", 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高級編程", Author = "李四", PublicationDate = Convert.ToDateTime("2011-09-11 12:12:45") });
            base.Seed(context);
        }
    }
}

3、定義數(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 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   查詢語法
                var result = from p in context.Books where p.Name.Equals("JavaScript高級編程") select p;
                #endregion

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

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

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

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

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

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

重點理解:

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

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

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

相關(guān)文章

  • ASP.NET Core利用UrlFirewall對請求進行過濾的方法示例

    ASP.NET Core利用UrlFirewall對請求進行過濾的方法示例

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core利用UrlFirewall對請求進行過濾的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • asp.net中穿透Session 0 隔離(一)

    asp.net中穿透Session 0 隔離(一)

    服務(wù)(Service)對于大家來說一定不會陌生,它是Windows 操作系統(tǒng)重要的組成部分。我們可以把服務(wù)想像成一種特殊的應(yīng)用程序,它隨系統(tǒng)的“開啟~關(guān)閉”而“開始~停止”其工作內(nèi)容,在這期間無需任何用戶參與
    2012-11-11
  • asp.net gridview自定義value值的代碼

    asp.net gridview自定義value值的代碼

    asp.net gridview自定義value值的代碼,需要的朋友可以參考下。
    2011-07-07
  • ASP.NET中的C#基礎(chǔ)知識

    ASP.NET中的C#基礎(chǔ)知識

    本文主要介紹了ASP.NET中的C#基礎(chǔ)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • .Net Core項目如何添加日志功能詳解

    .Net Core項目如何添加日志功能詳解

    這篇文章主要給大家介紹了關(guān)于.Net Core項目如何添加日志功能的相關(guān)資料,日志功能是我們開發(fā)中經(jīng)常需要用到的一個功能,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Asp.Net數(shù)據(jù)控件引用AspNetPager.dll分頁實現(xiàn)代碼

    Asp.Net數(shù)據(jù)控件引用AspNetPager.dll分頁實現(xiàn)代碼

    今天與大家分享一下“Asp.Net數(shù)據(jù)控件引用AspNetPager.dll分頁”首先聲明以下幾點
    2012-01-01
  • ASP.NET MVC分頁的實現(xiàn)方法

    ASP.NET MVC分頁的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了ASP.NET MVC分頁的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • MVC異常處理詳解

    MVC異常處理詳解

    這篇文章主要為大家詳細介紹了MVC異常處理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Asp.Net在線預(yù)覽Word文檔的解決方案與思路詳解

    Asp.Net在線預(yù)覽Word文檔的解決方案與思路詳解

    這篇文章主要介紹了Asp.Net在線預(yù)覽Word文檔的解決方案與思路,大致思路是先將Word文檔轉(zhuǎn)換Html,再預(yù)覽Html,需要注意電腦安裝Office,需要的朋友可以參考下
    2022-04-04
  • asp.net 生成靜態(tài)時的過濾viewstate的實現(xiàn)方法

    asp.net 生成靜態(tài)時的過濾viewstate的實現(xiàn)方法

    有時候我們在用asp.net生成靜態(tài)文件的時候,總會出現(xiàn)一些viewstate的字符,因為是靜態(tài)的不是aspx文件,所有沒必要留了,精簡代碼等原因,大家就需要看下面的方法了。
    2009-03-03

最新評論