下载app免费领取会员
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();
}
}
本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。
上一篇:二次开发教程:HttpWebRequest&&multipart/form-data
下一篇:二次开发教程:entity framework 迁移
推荐专题