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

      主站蜘蛛池模板: 国产精品99精品一区二区三区 | 亚洲国产精品一区二区久久hs| 精品一区二区三区AV天堂| 综合久久一区二区三区 | 中文字幕精品亚洲无线码一区| 在线精品视频一区二区| 久久国产精品一区免费下载| 亚洲一区视频在线播放| 精品国产一区二区三区免费看| 亚洲第一区视频在线观看| 久久久精品人妻一区二区三区| 国产在线观看一区精品| 国产精品主播一区二区| 精品久久久久久中文字幕一区| 五十路熟女人妻一区二区| 中字幕一区二区三区乱码| 精品少妇ay一区二区三区 | 亚洲中文字幕丝袜制服一区| 精品福利一区3d动漫| 国产伦精品一区二区三区免费下载| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲一区爱区精品无码| 国产精品无码一区二区三区电影 | 人妻无码一区二区三区AV| 亚洲AV无码一区东京热久久| 亚洲乱码日产一区三区| 久久久精品一区二区三区| 亚洲AV无码一区二区二三区软件 | 精品视频在线观看一区二区 | 午夜无码视频一区二区三区| 一区二区三区中文字幕| 内射白浆一区二区在线观看| 国产精品男男视频一区二区三区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 欧美成人aaa片一区国产精品 | 毛片一区二区三区| 国产精品无码一区二区在线观| 日本v片免费一区二区三区| 无码AV动漫精品一区二区免费| chinese国产一区二区| 国产a∨精品一区二区三区不卡|