完善主體資料,免費贈送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 遷移

    主站蜘蛛池模板: 精品国产乱子伦一区二区三区 | 日本一区午夜爱爱| 精品无码成人片一区二区98 | 一区二区三区免费视频播放器| 国产精品va无码一区二区| 动漫精品一区二区三区3d| 亚洲视频一区二区三区四区| 一级毛片完整版免费播放一区 | 国产伦精品一区二区三区在线观看| 国产日韩一区二区三免费高清 | 美女毛片一区二区三区四区| 精品少妇一区二区三区在线| 波多野结衣在线观看一区 | 国产伦理一区二区三区| 久久久老熟女一区二区三区| 香蕉一区二区三区观| 视频一区二区三区免费观看| 性色av闺蜜一区二区三区| 亚洲国产日韩一区高清在线| 亚洲一区二区三区在线观看精品中文| 日韩精品一区二区三区不卡| 国产精品无码亚洲一区二区三区| 色偷偷一区二区无码视频| 日本欧洲视频一区| 无码视频一区二区三区在线观看| 亲子乱AV视频一区二区| 国产激情视频一区二区三区| 日本成人一区二区| 亚洲一区精品视频在线| 偷拍激情视频一区二区三区| 亚洲色无码专区一区| 国产SUV精品一区二区88| 日本人的色道www免费一区| 成人精品一区二区三区校园激情| 成人区人妻精品一区二区不卡| 国产剧情一区二区| 在线观看国产一区| 人妻av无码一区二区三区| 亚洲一区精彩视频| 国产在线精品一区在线观看| 亚洲乱码国产一区网址|