.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. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
随机推荐
- JEECG&Dubbo Demo
jeecg框架service与dao层类图 吴水成Dubbo Demo项目架构图
- matlab中 mcc、mbuild和mex命令详解
先简单的说说mcc.mbuild和mex到底怎么回事: mcc将M文件转换成C/C++文件和相应的MEX包裹文件(需要Matlab编辑器),但在特定条件下可以自动调用mbuild或者mex mex将C ...
- UNIX环境高级编程——信号说明列表
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGK ...
- UNIX环境高级编程——信号
一.信号生命周期 从信号发送到信号处理函数的执行完毕. 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进 ...
- Unity2D Sprite灰白图(Unity3D开发之十一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=596 昨晚看到群里问到2DSpr ...
- shell的case语句
case语句格式 # vi test.sh : echo "input : " read num echo "the input data is $num" c ...
- android studio签名
1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...
- 《java入门第一季》之正则表达式常见规则
正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) ...
- 【一天一道LeetCode】#49. Group Anagrams
一天一道LeetCode系列 (一)题目 Given an array of strings, group anagrams together. For example, given: [" ...
- C语言实现的猜数字小游戏(主要是对于自定义函数的运用)
#include <stdio.h> #include <stdlib.h> #include<time.h>//加上此头文件的作用是什么?另外不加的话有什么影响? ...