Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用
ORM作为一种数据库訪问机制已广泛地应用于各种项目其中,在.Net开发中,应用比較广泛的ORM框架大致有以下几个:
官方支持的有:Linq to SQL。Entity Framework。三方的有:NHibernate。前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用。
首先用Visual Studio(2012或2013,其他版本号须要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完毕后会发现Entity Framework已经被加入到项目其中并已经写好了一些主要的方法。
首先看项目引用References,会看到EntityFramework程序集。再看根文件夹以下的配置文件web.config会看到相关配置项:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
也就是说对于没有包括Entity Framework的项目而言,假设想使用Entity Framework仅仅须要上面的步骤即可,加入程序集,然后加入配置文件节点信息(对于配置文件,怎么自己定义配置节点Section。我会在写完mvc4后的兴许博文中介绍)。上面步骤支持code first方式,但假设想用Entity Framework的可视化操作功能,那么须要安装Entity Framework工具。
以下来看看详细应用。
Entity Framework支持双方面的应用,Code First和Database First。
Code First即代码优先原则,也就是说先创建实体类。再依据实体类创建数据库。
第二种就是Database First即数据库优先原则,也就是说依据数据库来自己主动创建实体类。
先说第一方面的应用,Code First。
第一步:创建实体类。
直接执行刚创建的项目。会看到帐户管理功能已经做好了,打开注冊页面,注冊一个帐户完毕登陆,全部的功能全部已经包括在了创建的项目中。在注冊和登陆时文本框的验证功能也已经写好了,打开解决方式窗体,点击功能栏上的“显示全部文件”,打开App_Data目录,会看到有一个mdf的数据库文件,右键选择”加入到项目中“,打开数据库文件会看到帐户管理的全部表, 来看一下是怎样实现的。
打开Models目录,打开文件AccountModels文件,会看到UsersContext类。它继承自DbContext类。DbContext类为Entity Framework的基础。包含初始化数据库连接。Database类,DbSet类。实体验证DbEntityValidationResult。 实体类DbEntityEntry等。
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
UserContext类创建一个构造函数并指定运行父类构造函数:public DbContext(string nameOrConnectionString);
DefaultConnection为连接字符串。能够查看配置文件:
<connectionStrings>
<add name="DefaultConnection" connectionString="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" providerName="System.Data.SqlClient" />
</connectionStrings>
假设想自己定义数据库位置。那么能够改动DefaultConnection字符串到指定位置,或改动base("DefaultConnection")的connectionString名称。
DbSet为创建数据库表的方法,想要创建的表放在DbContext继承类内。
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Current password")]
public string OldPassword { get; set; }
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
private static object _initializerLock = new object();
private static bool _isInitialized;
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<UsersContext>(null);
{
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see ", ex);
}
}
}
简单一点,保留所有现有的功能。我仅仅须要继承UserConext。
{
public DbSet<DataListForDemo> DataListForDemo { get; set; }
}
public class DataListForDemo
{
public int ID { get; set; }
public string col1 { get; set; }
public string col2 { get; set; }
public string col3 { get; set; }
public string col5 { get; set; }
[DataType(DataType.Date, ErrorMessage="{0} should be a correct date")]
public DateTime col4 { get; set; }
}
再来看看假设已经设计好数据库该怎么操作?
会看到导航界面,提供两种选择:从数据库生成和空Model。第一种方式会提供一个数据库连接,并能够选择须要创建哪些表、视图、存储过程、函数的实体类。另外一种方式则创建一个空的模板。
採用这样的方式会在项目中创建一个.edmx后缀的文件中面包含了创建的实体类、实体SP、Function等,操作上没有太多差别。
public virtual DbSet<DataListForDemo> DataListForDemo { get; set; }
public virtual DbSet<UserProfile> UserProfile { get; set; }
public virtual DbSet<webpages_Membership> webpages_Membership { get; set; }
public virtual DbSet<webpages_OAuthMembership> webpages_OAuthMembership { get; set; }
public virtual DbSet<webpages_Roles> webpages_Roles { get; set; }
public virtual ObjectResult<TestLinqToSQL_Result> TestLinqToSQL()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TestLinqToSQL_Result>("TestLinqToSQL");
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3MyNTg0NzU4NzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="width:406px; height:145px">
下一篇介绍HTML5。 CSS3, JQuery和JQuery UI在mvc4里面的应用。
Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用的更多相关文章
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 Entity Fram ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- MVC中使用EF(1):为ASP.NET MVC程序创建Entity Framework数据模型
为ASP.NET MVC程序创建Entity Framework数据模型 (1 of 10) By Tom Dykstra |July 30, 2013 Translated by litdwg ...
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...
- MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver to Mysql
在开发的初期个人认为因VS与Sqlserver的配合很默契,即可以方便的实现Code First,又可以使用SqlServer Manager很漂亮的进行建模与变更,也许是个人的使用习惯MS的界面做的 ...
- Entity Framework在Asp.net MVC中的实现One Context Per Request(附源码)
上篇中"Entity Framework中的Identity map和Unit of Work模式", 由于EF中的Identity map和Unit of Work模式,EF体现 ...
随机推荐
- [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)
3625: [Codeforces Round #250]小朋友和二叉树 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 650 Solved: 28 ...
- WC2018伪题解
NOIP分数过低的场外选手,一个月之后才有幸膜到这套卷子.感觉题目质量很不错啊,可惜了T1乱搞可过,T2题目出锅非集训队员没有通知到,导致风评大幅被害. 感觉Cu的话随手写两个暴力就稳了,Ag的话T3 ...
- 91网漏洞打包#越权+爆破+存储xss可打cookie
漏洞一.主站存在登录口爆破 抓包,爆破一下 爆破成功 漏洞二.检测app时一处存储xss 在app登录后 我要提问那里插入xss 然后弹窗 可以打到cookie 漏洞三.app个人资料处平行越权可查看 ...
- bzoj 1030
dp[i][j] 表示,在AC自动机中,从根节点开始,走了i条边,并且经过的点不包含危险节点,走到了j节点的路径数. 收获: 1.正难则反 2.一个字符串不包含给定pattern中的任何一个,则该字符 ...
- Java反射机制涉及的类常见方法使用总结
import java.lang.reflect.Constructor; import java.lang.reflect.*; /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JV ...
- 我弄的一些TASKER配置
http://tieba.baidu.com/p/2184969007 我弄的一些配置,需要的童鞋们找自己想要的吧,有些配置感觉还是很繁琐,请高手不吝赐教才好,图片太多,就发链接了. ◆保持屏幕开启, ...
- Two PWM outputs from MCU combine to form a monotonic 16-bits DAC
http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC
- 静态资源(StaticResource)和动态资源(DynamicResource)
静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用.这是通过使用 StaticResource 标记扩展或 DynamicRe ...
- win8升级8.1提示卸载sentinel runtime drivers
Win8升级8.1时提示需卸载sentinel runtime drivers的解决方法 第一步:打开sentinelcustomer.safenet-inc.com/sentineldownload ...
- FIS3中使用less
安装插件: npm install -g fis-parser-less npm install -g fis3-postpackager-loader 配置:fis-conf.js 使用fis-pa ...