.net Entity Framework初识1
利用EF可以直接操纵数据库,在一些简单的项目里甚至完全不用写sql。
一 code first
1、在web.config中设置连接字符串
这一步可以省略。如果跳过这一步,程序会默认生成一个可用的连接字符串,生成的数据库文件放在程序根目录的App_Data中。
<configuration>
<connectionStrings>
<add name="conn" connectionString="Data Source=数据源; Initial Catalog=数据库; Integrated Security=True; MultipleActiveResultSets=True;"
providerName="System.Data.SqlClient" /> <!--MultipleActiveResultSets是设置连接可重用,提高效率-->
</connectionStrings>
</configuration>
2、在Models中新建一个类Person.cs
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
}
3、在Controllers中新建一个 包含视图的MVC5控制器(使用Entity Framewok)
控制器名称:HomeController
模型类:选择刚刚新建的Person类
数据上下文:点击新建数据上下文,并把默认选中的部分改成所需的名字如,Project
最后勾选 生成视图,点击添加按钮,VS就在为我们搭建基架了。
此时:
Controllers文件夹多了一个HomeController,里面包含了一些增删改查的基本方法;
Models文件夹多了一个ProjectContext.cs文件,里面有个构造函数publicProject():base("name=ProjectContext"),把name改成第一步中连接字符串的name。
Views文件夹多了5个视图。
这时我们打开Index.cshtml视图,运行程序后可以发现,数据库中多了一个库,名字就是web.config中设置的名字,其中有两张表,一个叫__MigrationHistory,一个叫People(本来应该是Person,但是VS自动使用了Person的复数People。最终的标明是依ProjectContext.cs中属性名而定的)。
__MigrationHistory表是EF用来检测模型类的变化。可以放心的删除它,此时EF假设我们知道自己在做什么,。一旦删除它,我们就要手动保持数据库与模型类的匹配。
当模型和数据库不一致时
(一)销毁数据库并重建
在Application_Start()中调用EF的静态方法:
Database.SetInitializer(new DropCreateDatabaseAlways<myProjectContext>()); //每次运行都重建
或者
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<myProjectContext>()); //当模型改变时重建
其中Database类位于Sysem.Data.Entity命名空间下。
销毁并重建数据库将无法保留数据库中的数据,因此这种方法主要是为应用程序生命周期早期阶段的迭代和快速变化提供便利的。
一旦发布一个实际网站并采用真实的客户数据,就不能每次都销毁数据库了。
重新创建的新库,在开发的时候经常需要插入一两条数据进行调试,可以重写DropCreateDatabaseAlways或者DropCreateDatabaseIfModelChanges的Seed方法:
首先在App_Start中新建一个类如下:
public class ProjectContextInitializer:DropCreateDatabaseAlways<ProjectContext>
{
protected override void Seed(ProjectContext context)
{
context.Person.Add(new Person { Name = "卡特琳娜" });
base.Seed(context);
}
}
然后在Application_Start()中调用:
Database.SetInitializer(new ProjectContextInitializer());
这样会在每次运行程序时的第一次与数据库交互时,销毁原库、创建新库之后默认插入Seed中的数据。
.net Entity Framework初识1的更多相关文章
- 基于.NET的微软ORM框架视频教程(Entity Framework技术)
基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲 ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 来,给Entity Framework热热身
先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
随机推荐
- Android开发学习之路--Broadcast Receiver之初体验
学习了Activity组件后,这里再学习下另一个组件Broadcast Receiver组件.这里学习下自定义的Broadcast Receiver.通过按键自己发送广播,然后自己接收广播.新建MyB ...
- sed命令 linux
sed 实用工具是一个"编辑器",但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的.这意味着您必须将要对数据执行的命令插入到命令行或要处 理的脚本中.当显示它时,请 ...
- 2. MariaDB激活二进制日志
翻译人员: 铁锚 翻译时间: 2013年12月25日 原文地址: Activating the Binary Log 参考了: <高可用MySQL 构建健壮的数据中心> 要启用二进制日志功 ...
- 手把手带你画一个 时尚仪表盘 Android 自定义View
拿到美工效果图,咱们程序员就得画得一模一样. 为了不被老板喷,只能多练啊. 听说你觉得前面几篇都so easy,那今天就带你做个相对比较复杂的. 转载请注明出处:http://blog.csdn.ne ...
- WebService详解(二)
WsExplorer和Tcp/Ip Monitor工具本身就存在于eclipse和MyEclipse中 使用工具的原因: 1. 使用工具可以更好的了解WebService请求的过程 2. 使 ...
- Linux System Programming --Chapter Eight
内存管理 一.分配动态内存的几个函数 用户空间内存分配:malloc.calloc.realloc1.malloc原型如下:extern void *malloc(unsigned int num_b ...
- 如何让你的传输更安全——NIO模式和BIO模式实现SSL协议通信
对于SSL/TLS协议,如果要每个开发者都自己去实现显然会带来不必要的麻烦,正是为了解决这个问题Java为广大开发者提供了Java安全套接字扩展--JSSE,它包含了实现Internet安全通信的一系 ...
- MT6575 充电流程
1,目前充电主要包括Power Off Charging(关机充电) .IPO Charging(休眠充电)和 OS Charging(开机充电) 三个部分 2,Power Off Charging ...
- 如何在代码中取得一个特点type的关节
我们可以在初始化方法中添加如下代码: -(void)didLoadFromCCB{ Class distanceJointClass = NSClassFromString(@"CCPhys ...
- Android百分比布局支持库(android-percent-support)
Android中提供了五种布局,其中用的最多的就是:LinearLayout, RelativeLayout 和 FrameLayout这三种布局,在对某一界面进行布局时最先想到也是通过这三种来布局的 ...