EntityFramework学习心得


EntityFramework是什么

ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。

ADO.NET Entity Framework  Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema  Storage Schema 三层,其上还有 Entity ClientObject Context 以及 LINQ 可以使用。

关于EntityFramework的更多可以参考,这里就不在详细罗列了

Msdn上的EntityFramework     http://msdn.microsoft.com/en-us/library/bb399572.aspx

维基百科上的EntityFramework  http://zh.wikipedia.org/wiki/ADO.NET_Entity_Framework

如何使用EntityFramework

自己按照MVC3.0Demo音乐商店(MusicStore)的演示从头到尾做了一遍(解决方案取名MvcApplication1),下面我们来看看在MVC中如何使用EntityFramework。在这个案例中有如下几个地方涉及到跟EntityFramework有关的地方:

Ø         Global.asax.cs

Ø         MvcApplication1.Models.SampleData.cs

Ø         MvcApplication1.Models.MusicStoreEntities.cs

Ø         Web.Config

我们一个文件一个文件的先看一遍。

Global.asax.cs

Global.asax.cs类中的Application_Start方法添加了一行代码

      

 Application_Start()方法见MSDN:

The Application_Start and Application_End methods are special methods that do not represent HttpApplication events. ASP.NET calls them once for the lifetime of the application domain, not for each HttpApplication instance.

即在Asp.net应用程序第一次启动时会启动该事件。

我们将鼠标放在SetInitializer方法上面会出现

Gets or sets the database initialization strategy. The database initialization strategy is called when DbContext instance is initialized from a DbCompiledModel. The initialization strategy can optionally check for database existence, create a new database, and seed the database with data. The default strategy is an instance of DropCreateDatabaseIfModelChanges(Of TContext) created with useSeedData set to true.

什么意思,简单翻译就是:设置或获取数据库初始化策略。当DbContext被实例化时这个数据库初始化策略将被调用。初始化策略可以选择检查数据库是否存在,创建一个新的数据库,用数据填充数据库。默认的策略是DropCreateDatabaseIfModelChanges类的一个实例,这个实例包含用户填充数据集合。


SetInitializer语法

注意:参数类型是TContext类型的。

 

MvcApplication1.Models.SampleData.cs

打开Model.SampleData类,看到最前面的几句代码


很简单,我们可以看出:

²      SampleData类继承自DropCreateDatabaseIfModelChanges类(就是SetInitializerstrategy参数的默认实例类型)

²        有一个重写的方法Seed

我们将鼠标放在DropCreateDatabaseIfModelChanges方法上面会出现

An implementation of IDatabaseInitializer(Of TContext)that will delete, recreate, and optionally re-seed the database with data only if the model has changed since the database was created. This is achieved by writing a hash of the store model to the database when it is created and then comparing that hash with one generated from the current model. To seed the database, create a derived class and override the Seed method.

简单翻译一下就是:它是IDatabaseInitializer类的一种实现,仅当数据库已经存在且模型发生改变时会删除原有的数据库,重新建立数据库并填充数据库。当数据库创建后通过将一系列的存储模型写到数据库中来实现填充数据的。这需要创建一个子类并重写Seed方法。

因此SampleData类继承自DropCreateDatabaseIfModelChanges类并重写Seed方法。


DropCreateDatabaseIfModelChanges语法

注意:类型是TContext类型,而Tcontext是继承自DbContext类。


注意:有一个Seed方法,必须重写。


Seed方法语法

       Sees参数类型为Tcontext类型的,在方法内用数据来填充参数context,在本例中即向MusicStoreEntities对象context内填充数据。

MvcApplication1.Models.MusicStoreEntities.cs

打开MvcApplication1.Models.MusicStoreEntities文件,


可以看到MusicStoreEntities类是继承自DbContext类的,且包含了DbSet类型的数据。

我们将鼠标放在DbSet上,可以看到

Represents an entity set that is used to perform create, read, update, and delete operations. A non-generic version of DbSet(Of TEntity) which can be used when the type of entity is not known at build time.

也就是代表实体集,用于执行创建,读取,更新和删除操作数据。非泛型版本的DbSet实体类型在编译时类型没有确定但也可以使用。

       打开数据库,我们可以看到数据库表和该类成员基本上一一对应,类实现数据库的增删改查操作。

Web.Config

打开Web.Config文件,看到数据库连接字符串:


NameMusicStoreEntities对应着MvcApplication1.Models.MusicStoreEntities类,connectionString对应着数据库连接串,在这里表示App_Data文件夹中的MvcMusicStore.sdf数据库文件。

 

总结

这四个文件看完了,它们的逻辑关系也就一目了然了。

System.Data.Entity.Database.SetInitializer( A);默认参数是DropCreateDatabaseIfModelChanges类型的

 

A是继承自DropCreateDatabaseIfModelChanges(B)的,且重写了Seed方法

 

B又是继承自DbContext的,包含了数据库的数据模型,实现数据库基本操作

 

同时B又是Web.Config文件中连接字符串的名

 

       当我们的数据库已经建立好了,并且存储有数据或不需要初始化应用程序时填充数据,这时我们在程序中只需要配置好web.Config文件的数据库连接字符串,同时建立对应的数据库操作类(继承自DbContext)即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值