完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:ef 查詢相關數據

    發布于:2019-07-24 16:27:06

    網友投稿

    更多

        public class DefaultContext : DbContext

        {

            private static string _conStr =

                @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\code\gits\EntityFramework6\MultiTableDemo\MultiTableTest.mdf;Integrated Security=True";

            public DefaultContext()

                :base(_conStr)

            {

                //this.Configuration.LazyLoadingEnabled = false;

            }

            public DbSet<Person> Persons { get; set; }

     

            public DbSet<Book> Books { get; set; }

     

        }

        [Table("persons")]

        public class Person

        {

            [Key]

            [Column("person_id")]

            public int Id { get; set; }

            [Column("person_name")]

            public string Name { get; set; }        

            public Person()

            {

                Books = new List<Book>();

            }        

            public virtual List<Book> Books { get; set; }

        }

        [Table("books")]

        public class Book

        {

            [Key]

            [Column("book_id")]

            public int Id { get; set; }

            [Column("book_name")]

            public string Name { get; set; }

            [Column("person_id")]

            [ForeignKey("Person")]

            public int PersonId { get; set; }

            public Book()

            {

            }

            public virtual Person Person { get; set; }

        }

    先使用下面的方法創建數據:


            static void CreateData()

            {

                using (DefaultContext context = new DefaultContext())

                {

                    Person person1 = new Person

                    {

                        Name = "Jim"

                    };

                    Book book1 = new Book()

                    {

                        Name = "Book1_Name"

                    };

                    Book book2 = new Book()

                    {

                        Name = "Book2_Name"

                    };

     

                    person1.Books.Add(book1);

                    person1.Books.Add(book2);

                    context.Persons.Add(person1);

                    context.SaveChanges();

                }

            }

    ef 里面查詢相關數據有三種方法:延遲加載,預先加載,顯式加載


    延遲加載:這個需要將相關屬性設為virtual  如:


    Person類里的public virtual List<Book> Books { get; set; } 


    Book類里的 public virtual Person Person { get; set; }


    并且將 DbContext的Configuration.LazyLoadingEnabled 屬性設為true(默認是true)


    現在查詢Person的時候會自動查詢出相關的Book


            static void Main(string[] args)

            {

                using (DefaultContext context = new DefaultContext())

                {

                    var p = context.Persons.FirstOrDefault();

                    var bk1 = p.Books.FirstOrDefault();                

                }

            }


    顯式加載:


    首先將在DefaultContext構造函數里禁用 延遲加載,上面的代碼將查不到Book數據了


            public DefaultContext()

                :base(_conStr)

            {

                this.Configuration.LazyLoadingEnabled = false;

            }


    查詢方法如下:       


           static void Main(string[] args)

            {

                using (DefaultContext context = new DefaultContext())

                {

                    var p = context.Persons.FirstOrDefault();

                    context.Entry(p).Collection(tp => tp.Books).Load();     //顯式加載           

                    var bk1 = p.Books.FirstOrDefault();         

                }

            }


    或:


            static void Main(string[] args)

            {

                using (DefaultContext context = new DefaultContext())

                {

                    var bk = context.Books.FirstOrDefault();

                    context.Entry(bk).Reference(b => b.Person).Load();//顯式加載     

                    var p1 = bk.Person;

                }

            }


    預先加載


            static void Main(string[] args)

            {

                using (DefaultContext context = new DefaultContext())

                {

                    var p = context.Persons.Where(tp => tp.Name == "Jim").Include(tp => tp.Books).FirstOrDefault();

                }

            }

    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:HttpWebRequest&&multipart/form-data

    下一篇:二次開發教程:entity framework 遷移

    主站蜘蛛池模板: 日韩一区二区三区电影在线观看| 国产成人久久一区二区三区| 亚洲av不卡一区二区三区| 亚洲一区二区三区高清| 色多多免费视频观看区一区| 亚洲视频在线一区二区| 亚州AV综合色区无码一区| 国产成人精品无码一区二区三区| 在线视频亚洲一区| 成人免费观看一区二区| 国产无套精品一区二区| av无码一区二区三区| 日本一区二区三区精品国产| 国内精品一区二区三区最新| 精品少妇人妻AV一区二区三区| 精品乱码一区二区三区四区| 亚洲成AV人片一区二区| 成人无码AV一区二区| 国产一区二区三区免费观在线| а天堂中文最新一区二区三区| 国产成人一区二区动漫精品| 国产精品一区二区久久精品涩爱| 中文字幕日韩一区二区不卡 | 无码人妻精品一区二区三区夜夜嗨 | 成人无码一区二区三区| 国产伦精品一区二区三区四区 | 天堂Av无码Av一区二区三区| 无码人妻久久一区二区三区| 日韩人妻一区二区三区蜜桃视频| 亚洲一区精彩视频| 美女视频一区三区网站在线观看 | 日韩人妻无码一区二区三区综合部| 国产一在线精品一区在线观看| 又硬又粗又大一区二区三区视频| 日韩精品人妻av一区二区三区| 中文字幕无码一区二区免费 | 国产美女口爆吞精一区二区| 国产成人精品亚洲一区| 国产高清一区二区三区四区| 一区二区三区无码视频免费福利| 欧美日本精品一区二区三区|