MVC之CodeFirst
1.建立MVC项目》NuGet安装EF
2.建立模型:
public class Blog
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public DateTime Time { get; set; }
public string Summary { get; set; }
public string Content { get; set; }
public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>();
} public class Comment
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string VisitorName { get; set; }
public string Email { get; set; }
public DateTime Time { get; set; }
public string Content { get; set; } [ForeignKey("Blog")]
public Guid BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
模型需要引用命名空间:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
3.建立数据库类 DbContext:
public class EFDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Comment> Comments { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //去除“设置表名为复数”这条约定
}
}
DbContext需要引用命名空间:
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
4.配置web.config数据库连接,连接名称需要是EFDbContext,和建立的DbContext名称一致;或者在EFDbContext中使用构造函数指定连接名称:
public EFDbContext() : base("数据库链接的结点名字") { }
<add name="EFDbContext" connectionString="Data Source=.;Initial Catalog=db_codefirst_test;Persist Security Info=True;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />
记得加上:providerName="System.Data.SqlClient"
5.新建一个测试Controller,选择具有增删改查的模板,然后选择对应的模型类、数据库上下文类。
6.运行程序,浏览刚才建的Controller的View,数据库就自动建好了。
7.要是修改模型类,数据库中的表需要删了重建。
8.可自动根据模型变化重新建库,并插入初始化数据,选择不同模式即可。
DropCreateDatabaseIfModelChanges:当模型改变时,重新建库;
DropCreateDatabaseAlways:每次启动程序时,重新建库;
Seed方法用来插入数据。
/// <summary>
/// 数据库初始化
/// </summary>
public class BaseInitializer : DropCreateDatabaseIfModelChanges<EFDbContext>
{
//CreateDatabaseIfNotExists:数据库不存在时重新创建数据库
//DropCreateDatabaseIfModelChanges:当模型改变时,重新建库;
//DropCreateDatabaseAlways:每次启动程序时,重新建库;
protected override void Seed(EFDbContext context)
{
var blogs = new List<Models.Blog>
{
new Models.Blog{ Author="小明", Content="老师:小明,你给我滚出去!", Time=DateTime.Now, Title="小明日常", Comments=new List<Models.Comment>(){
new Comment(){ Content = "test", Email="908085411@qq.com", Time=DateTime.Now, VisitorName="jay.x" }
} },
new Models.Blog{ Author="小红", Content="老师:小红,你去看看小明去哪儿了!", Time=DateTime.Now, Title="小红日常"},
new Models.Blog{ Author="小蓝", Content="小蓝:老师,小明和小红在玩游戏!", Time=DateTime.Now, Title="小蓝日常"},
new Models.Blog{ Author="小白", Content="小白:我去看看!", Time=DateTime.Now, Title="小白日常"},
new Models.Blog{ Author="小黄", Content="小黄:我也去看看!", Time=DateTime.Now, Title="小黄日常"}
}; blogs.ForEach(s => context.Blogs.Add(s));
context.SaveChanges(); var cou = new List<Models.Product>
{
new Models.Product{ Name="西瓜", Price=decimal.Parse("3.5")},
new Models.Product{ Name="油桃", Price=decimal.Parse("")},
}; cou.ForEach(c => context.Products.Add(c));
context.SaveChanges();
}
}
BaseInitializer
在Global中注册这个初始化类:
protected void Application_Start()
{
......... //添加建表
Database.SetInitializer<EFDbContext>(new BaseInitializer());
}
//添加自动化建表,一般情况第一次运行需要这么写
//当修改了Model,又不想删除重建的时候,把SetInitializer的参数设null。
//原因是:删除重建会把测试数据也清除了
//Database.SetInitializer<EFDbContext>(null);
Database.SetInitializer<EFDbContext>(new BaseInitializer());
误删表,如何恢复:http://www.cnblogs.com/bleychen/p/4350913.html
EF通用数据层封装类:https://www.cnblogs.com/qtqq/p/6942312.html
MVC之CodeFirst的更多相关文章
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- 新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统
本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新做了一下,业务逻辑简化了许多,旨在加深对mvc,ef(codefirst),easyui,AutoMap ...
- Asp.net MVC 中 CodeFirst 开发模式实例
昨天写的这篇博客因为下班时间到了忘记保存了,好郁闷,得重新写一遍.实习所在公司使用的是CodeFirst开发模式,最近开始参与到公司的项目里面来了,发现这个模式特别好用,建库建表改变字段属性添加删除字 ...
- Asp.Net MVC +EF CodeFirst+多层程序设计
1.概述 这是一个基于个人博客的一个项目,虽然博客根本没必要做这么复杂的设计.但是公司有需求,所以先自己弄个项目练练手.项目需要满足下列需求 1.层与层之间需要解耦,在后期上线更新维护时不需要覆盖,只 ...
- 新年奉献MVC+EF(CODEFIRST)+EASYUI医药MIS系统(转)
出处:http://www.cnblogs.com/chenlinzhi/p/4332628.html 本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新 ...
- 分享基于.NET MVC+EF CodeFirst+IOC+EasyUI的框架设计
**注:要做工,没什么时间,等有空时会上传到GIT,项目结构如上,简单的说一下: **支持IOC及多数据库等,各项目由MVC区域隔离: 主要使用基于接口与抽象类进行高度的抽象与接口隔离,与其它框架比较 ...
- 七:mvc使用CodeFirst(代码优先)创建数据库
1. 理解EF CodeFirst模式特点 2. 使用CodeFirst模式生成数据库 1. CodeFirst模式(代码优先) Code First是Entity Framework提供的一种新的编 ...
- (七)学习MVC之CodeFirst迁移更新数据库
1.首先在程序包管理控制台输入:enable-migrations -force ,然后回车: 问题1: The EntityFramework package is not installed on ...
- MVC+EF(CODEFIRST)+EASYUI医药MIS系统
https://www.cnblogs.com/chenlinzhi/p/4332628.html
随机推荐
- Hydra密码破译工具
Hydra简介 Hydra是著名黑客组织thc开发的一款开源的暴力密码破解工具,可以在线破解多种密码,目前已经被Backtrack和kali等渗透平台收录.除了命令行下的Hydra外,还提供了Hydr ...
- python桌面端开发手记(序列化、压缩包、加密、图形界面GUI)
0x00 前段时间接到一个小项目是给某行业内部开发离线桌面端,业务流实现上总体分信息录入.加密导出.因为是win桌面端,所以老板说依托Access用VBA做,我据理力争了一下.之前就是用Acces ...
- IE9及以下版本获取上传文件的大小
IE9及以下版本不能识别files属性:获取图片需要设置浏览器 打开IE_工具_internet选项_安全_自定义级别. 启用ActiveX,开启跨域: var fso=new ActiveXobje ...
- effective C++学习二(仅供个人学习记录,本文摘录effective C++)
条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...
- Docker 批量启动
批量配置IP for i in `docker ps -a|awk 'NR>1 {print $NF}'`;do IP=`echo $i|awk -F_ '{print "192.16 ...
- MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)
本文原创,未经同意,谢绝转载!(转载请告知本人并且经过本人同意--By Pacific-hong) 本人小硕一枚,因为专业方向图像相关,所以用到opencv,然后网上MAC下Xcode配置opencv ...
- Winform 对话框
ColorDialog:显示可用颜色,以及用户可以自定义颜色的控件,以调色板对话框形式出现,可选择更改字体颜色 FolderBrowserDialog:显示一个对话框,提示用户选择文件夹 FontDi ...
- phpexcel 导入超过26列时的解决方案
$highestColumn = $sheet->getHighestColumn(); // 取得总列数 ++$highestColumn; for ($row = 5; $row <= ...
- Requests库的文档高级用法
高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...
- pandas 常用清洗数据(二)
1. df.head() Here we import pandas using the alias 'pd', then we read in our data. df.head - shows u ...