Entity Framework(EF)知识整理
来源:互联网 发布:打击网络谣言法律依据 编辑:程序博客网 时间:2024/05/21 06:44
一、专业术语:
1.Poco( Plain Old CLR Object的缩写)
就是那些不包括INSERT、ADD、DEL等数据持久化操作的以及不包括任何业务逻辑功能的原始类。只包含最基本的GETTER 和SETTER如下类:
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public byte[] Picture { get; set; }
public List<Product> Products { get; set; }
}如果在POCO在增加持久化操作就不叫POCO了。那是属于领域模型了。
2.DatabaseFirst (基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件)
参考文章:http://www.cnblogs.com/yangyancheng/archive/2011/04/29/2032817.html
http://www.cnblogs.com/fly_dragon/archive/2011/02/20/1958884.html
ModelFirst(这种方式是先利用某些工具(如VS的EF设计器)设计出实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件)
参考文章:http://www.cnblogs.com/yangyancheng/archive/2011/05/03/2035248.html
http://www.cnblogs.com/fly_dragon/archive/2011/02/21/1960230.html
3.CodeFirst(这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型)
参考文章:
http://www.cnblogs.com/yangyancheng/archive/2011/05/05/2037512.html
http://www.cnblogs.com/fly_dragon/archive/2011/02/22/1961730.html
Code First方法默认情况下是以命名空间.DBcontext类名来作为自动创建的数据库名称。我们也可以按如下方法指定数据库名称:
public class BlogDbContext : DbContext { /// <summary> /// 新建数据库,并命名为BlogDB, /// </summary> public BlogDbContext() : base("BlogDB") { } public IDbSet<BlogUser> BlogUsers { get; set; } public IDbSet<Post> Posts { get; set; } }code First这种方式也可以用于已存在的数据库,具体作法如下:
第一步:在app.config或者web.config中配置数据库连接字符串
<configuration> <connectionStrings> <add name="BlogDB" providerName="System.Data.SqlClient" connectionString="Data Source=.\sqlexpress;Initial Catalog=MyBlogDB;Integrated Security=True"/> </connectionStrings> </configuration>第二步:是让DBcontext获取已存在数据库,在构造DBcontext时,指定使用这个连接字符串
public class BlogDbContext : DbContext { /// <summary> /// 会在app.config或者web.config文件中查找BlogDB节,做为连接字符串 /// 但数据库中必须已存在表,即不会重新创建表,这种方法类似DataBase First /// </summary> public BlogDbContext() : base("name=BlogDB") { } public IDbSet<BlogUser> BlogUsers { get; set; } public IDbSet<Post> Posts { get; set; } }
二、知识点:
1.延迟加载(当查询的实体仅仅拥有一个相关的子实体,但是,多数情况下,你可能只需要加载部分数据)
两个步骤: 1.在需要延迟加载的属性前加上virtual ,该属性的类型可以是任务的集合类型ICOLLOCT<T>或者是0/1..1关联属性。
例如,更新Category实体类,使之支持延迟加载
public
class
Category{
public
int
CategoryID {
get
;
set
; }
public
string
CategoryName {
get
;
set
; }
public
string
Description {
get
;
set
; }
public
byte
[] Picture {
get
;
set
; }
public
virtual
List<Product> Products {
get
;
set
; }
...
2、在context构造器中开启延迟加载功能:
public
NorthwindContext() :
base
(
"name=NorthwindEntities"
,
"NorthwindEntities"
)
{
ContextOptions.LazyLoadingEnabled =
true
;
_categories = CreateObjectSet<Category>();
_products = CreateObjectSet<Product>();
}
下面用Code First的方式先做个complex属性。2.处理实体Complex属性(Complex属性是将一个对象做为另一个对象的属性。映射到数据库中则子对象表现为多个属性字段)
在上面的代码中,构造了一个Book实体,包含一个complex属性publiser,Pubisher被标明了是ComplexTypepublic class Book { public int BookId { get; set; } public string BookTitle { get; set; } public Publisher Publisher { get; set; } } [ComplexType] public class Publisher { public string PublisherName { get; set; } public string PublisherAddress { get; set; } } public class BookDbContext : DbContext { public BookDbContext() : base("BookDB") { Database.SetInitializer<BookDbContext>( new DropCreateDatabaseIfModelChanges<BookDbContext>() ); } public IDbSet<Book> Books { get; set; } }创建数据库,并添加一条测试记录
using (BookDbContext db = new BookDbContext()) { Book newbook = new Book() { BookTitle = "EF4.1 step by step", Publisher = new Publisher() { PublisherName = "机械工业", PublisherAddress = "北京" } }; db.Books.Add(newbook); db.SaveChanges(); }创建后的数据库如图示:
可以清楚的看到,complex属性作数据库的多个字段存在,命名格式为ComplexType.Property
- Entity Framework(EF)知识整理
- Entity Framework(EF)数据查询
- Entity Framework(实体框架 EF)
- 初学实体框架EF(Entity Framework)
- EF | Entity framework
- 【Entity Framework】EF初识
- Linq与EF(Entity Framework)
- ADO.NET Entity Framework(EF)
- NHibernate与EF(Entity Framework)的区别
- NHibernate与EF(Entity Framework)的区别
- NHibernate与EF(Entity Framework)的区别
- NHibernate与EF(Entity Framework)的区别
- NHibernate与EF(Entity Framework)的区别
- 10.C#:实体框架EF(entity framework)
- entity framework (EF)操作mysql数据模型环境准备
- 配置EF(Entity Framework)、Mysql.client及MySql.Connector
- 关于EF(entity framework)中的codefirst、modelfirst和databasefirst
- NHibernate与EF(Entity Framework)的区别
- Java Enum
- 进程控制理论<四>--消息队列和信号量
- android 中调用接口发送短信
- IME输入法编程心得
- CSS Positioning
- Entity Framework(EF)知识整理
- SwiFTP
- 黑马程序员_银行业务调度系统
- windows下Glib使用
- ActiveMQ分享(一)JMS简介
- C++ - 随机数生成器(random-number generator) 的 详解 及 代码
- 基础的选择排序
- linux可执行文件的内容分析工具nm objdump readelf ar ldd
- Binary Tree Preorder Traversal