中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Entity?Framework如何使用LINQ操作實體

發布時間:2022-03-05 14:01:49 來源:億速云 閱讀:175 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Entity Framework如何使用LINQ操作實體,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、什么是LINQ TO Entities

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

因為LINQ是聲明式語言,它讓我們聚焦于我們需要什么數據而不是應該如何檢索數據。LINQ to Entities在實體數據模型之上提供了一個很好的抽象,所以我們可以使用LINQ來指定檢索什么數據,然后LINQ to Entities provider會處理訪問數據庫事宜,并為我們取到必要的數據。

二、LINQ to Entities執行流程

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

Entity?Framework如何使用LINQ操作實體

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

執行流程:

1、應用程序創建一個LINQ查詢。
2、LINQ to Entities會將該LINQ查詢轉換成EntityClient命令。
3、EntityClient命令然后使用EF和實體數據模型將這些命令轉換成SQL查詢。
4、然后會使用底層的ADO.NET provider將該SQL查詢傳入數據庫。
5、該查詢然后在數據庫中執行。
6、執行結果返回給EF。
7、EF然后將返回的結果轉換成CLR類型,比如領域實體。
8、EntityClient使用項目,并返回必要的結果給應用程序。

三、使用LINQ to Entities操作實體

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

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

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

1、定義領域實體:

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、定義初始化器,并寫入初始化數據

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>
        /// 初始化種子數據
        /// </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、定義數據庫上下文類

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());
        }

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

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

4、Main函數定義如下:

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},發布時間:{2}", item.Name, item.Author, item.PublicationDate));
                }
                #endregion
            }

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

5、運行程序,查看結果

Entity?Framework如何使用LINQ操作實體

查看數據庫結果:

Entity?Framework如何使用LINQ操作實體

查詢語法和方法語法的執行結果都是一樣的。

重點理解:

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

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

關于“Entity Framework如何使用LINQ操作實體”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都江堰市| 志丹县| 江山市| 乃东县| 江达县| 拉孜县| 钟山县| 凤庆县| 滨州市| 丰原市| 渑池县| 喀什市| 伊川县| 陇南市| 石林| 庆安县| 资中县| 乐东| 大庆市| 上犹县| 深圳市| 年辖:市辖区| 玛曲县| 怀柔区| 太仆寺旗| 固镇县| 新绛县| 甘孜| 堆龙德庆县| 宽城| 治县。| 大余县| 大庆市| 嘉义市| 隆回县| 周口市| 宁河县| 美姑县| 东丰县| 福贡县| 罗田县|