下載app免費(fèi)領(lǐng)取會員
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; }
}
先使用下面的方法創(chuàng)建數(shù)據(jù):
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 里面查詢相關(guān)數(shù)據(jù)有三種方法:延遲加載,預(yù)先加載,顯式加載
延遲加載:這個需要將相關(guān)屬性設(shè)為virtual 如:
Person類里的public virtual List<Book> Books { get; set; }
Book類里的 public virtual Person Person { get; set; }
并且將 DbContext的Configuration.LazyLoadingEnabled 屬性設(shè)為true(默認(rèn)是true)
現(xiàn)在查詢Person的時候會自動查詢出相關(guān)的Book
static void Main(string[] args)
{
using (DefaultContext context = new DefaultContext())
{
var p = context.Persons.FirstOrDefault();
var bk1 = p.Books.FirstOrDefault();
}
}
顯式加載:
首先將在DefaultContext構(gòu)造函數(shù)里禁用 延遲加載,上面的代碼將查不到Book數(shù)據(jù)了
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;
}
}
預(yù)先加載
static void Main(string[] args)
{
using (DefaultContext context = new DefaultContext())
{
var p = context.Persons.Where(tp => tp.Name == "Jim").Include(tp => tp.Books).FirstOrDefault();
}
}
本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。
上一篇:二次開發(fā)教程:HttpWebRequest&&multipart/form-data
下一篇:二次開發(fā)教程:entity framework 遷移
推薦專題