完善主體資料,免費贈送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无码一区二区三区性色| 亚洲色偷偷偷网站色偷一区| 国产一区在线视频| 波多野结衣中文一区二区免费| 国产福利日本一区二区三区| 在线精品日韩一区二区三区| 精品国产AⅤ一区二区三区4区| 亚洲熟妇av一区二区三区漫画| 日本免费一区二区三区| 亚洲av无码一区二区三区天堂 | 中文字幕在线精品视频入口一区| 久久国产免费一区二区三区| 曰韩人妻无码一区二区三区综合部 | 精品国产AⅤ一区二区三区4区| 亚洲国产精品一区二区久久| 97久久精品无码一区二区天美| 欧洲精品一区二区三区在线观看| 国产美女口爆吞精一区二区| 精品一区二区三区免费毛片爱| 国产伦精品一区二区三区免费迷| 激情一区二区三区| 精品久久综合一区二区| 精品久久一区二区三区| 秋霞日韩一区二区三区在线观看| 久久免费国产精品一区二区| 精品国产一区二区麻豆| 人妻体内射精一区二区三区| 日本一区二区高清不卡| 国产福利一区二区三区在线观看 | 日本强伦姧人妻一区二区| 91在线视频一区| 精品人妻一区二区三区毛片 | 亚洲AV成人精品日韩一区 | 无码人妻少妇色欲AV一区二区| 日韩精品一区二区三区国语自制| 无码AV中文一区二区三区| 日本精品少妇一区二区三区| 97久久精品无码一区二区天美| 在线观看午夜亚洲一区| 精品一区二区三区影院在线午夜| 在线日产精品一区|