ASP.NET MVC+Entity Framework code first 迁移
再来一张,选择 MVC 模版,其他的没选过,不会用 =_=!! 身份验证用个人用户账户,这个是为了偷懒,话说 ASP.NET Identity 还是很给力的,不用白不用 ^_^~
点击确定之后,会看到以下界面:
解决方案结构:
先更新一把先:
好吧,开工吧!!在Models目录下建立博客分类(Category)和博客(Post)两个类,代码贴在下面
Category:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace ShowPin.Web.Models
{
/// <summary>
/// 分类
/// </summary>
public class Category
{
public Category()
{
this.Posts = new List<Post>();
}
/// <summary>
/// 获取或设置分类标题
/// </summary>
public string Title { get; set; } /// <summary>
/// 该分类下的内容集合
/// </summary>
public virtual ICollection<Post> Posts { get; set; } }
}
Post:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace ShowPin.Web.Models
{
/// <summary>
/// 博文
/// </summary>
public class Post
{ /// <summary>
/// 获取或设置内容标题
/// </summary>
public string Title { get; set; } /// <summary>
/// 获取或设置内容
/// </summary>
public string Content { get; set; } /// <summary>
/// 获取或设置内容发布日期
/// </summary>
public DateTime CreateDate { get; set; } /// <summary>
/// 获取或设置点击数
/// </summary>
public int hits { get; set; } /// <summary>
/// 获取或设置分类ID
/// </summary>
public string CategoryId { get; set; } /// <summary>
/// 获取或设置分类
/// </summary>
public virtual Category Category { get; set; }
}
}
好了,接下来就是传说中的DBContext
ObjectContext:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web; namespace ShowPin.Web.Models
{
/// <summary>
/// 数据上下文
/// </summary>
public class ObjectContext : DbContext
{
public ObjectContext()
: base("ShowPinContext")
{ }
/// <summary>
/// 分类列表
/// </summary>
public DbSet<Category> Categories { get; set; } /// <summary>
/// 博文列表
/// </summary>
public DbSet<Post> Posts { get; set; }
}
}
在 web.config 的 connectionStrings 节点添加如下代码:
<add name="ShowPinContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-ShowPin.Context;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-ShowPin.Context.mdf" providerName="System.Data.SqlClient" />
大概是这个样子的,看下面的图片
好吧,接下来就让用数据库迁移功能,让代码在数据库中表现出来。
下面这个就是“程序包管理控制台”
输入:Enable-Migrations 然后按下“回车”键
这个…… 出错了,唉……出师不利啊!!错误原因就是当前项目中存在两个上下文类型,SB VS 不知道要用哪个来生成数据库,所以……
输入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext 再“回车”
又出错了=_=!!
模型生成过程中检测到一个或多个验证错误:
ShowPin.Web.Models.Category: : EntityType“Category”未定义键。请为该 EntityType 定义键。
ShowPin.Web.Models.Post: : EntityType“Post”未定义键。请为该 EntityType 定义键。
Categories: EntityType: EntitySet“Categories”基于未定义任何键的类型“Category”。
Posts: EntityType: EntitySet“Posts”基于未定义任何键的类型“Post”。
这个是因为没有定义主键,简单来说就是传说中的ID…… 在实体类上加上主键
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
string 类型的主键,还是比较少见的。
再来一次,输入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext 再“回车”
我是猴子请来的逗逼么??
再来一次吧!!
输入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext -force 再“回车”
搞定了 哈哈哈哈哈……
他还生成了一些文件,来瞧瞧是什么东西。
多了一个 Migrations 目录,和 Configuration.cs 文件,这是个什么东西呢?先不管他。
接下来是对 Category 做 CRUD 操作,新建一个 Controller
点击确定之后,奇迹就出现了T T,在浏览器输入:http://localhost:10223/Category
地址是我的本地地址,请根据实际情况修改。
很遗憾,出错了!!!
因为之前启用数据库迁移之后,并没有让它更新,接下来就让它更新吧!!打开程序包管理器控制台,输入 Add-Migration ini “回车”
在 Migrations 目录下又多了个文件
是什么东西?先不管它,接着输入:Update-database
貌似成功了,看看 App_Data 目录
数据库生成好了,再刷新网页
终于成功了,哈哈……接着是 Post
大功告成!
来个小小的总结:
1、上面出现的一些小问题,基本上是由于不细心造成的,所以在接下来的学习中一定要细心
3、上面的编码模式为 “代码优先”、“代码先现行”,英文比较好记 code first
相关资料:
http://msdn.microsoft.com/zh-cn/data/jj193542.aspx
http://www.cnblogs.com/qouoww/tag/Entity%20Framework/
4、数据库迁移的相关资料:
http://blog.csdn.net/vaivxuanzi/article/details/11633255
http://msdn.microsoft.com/zh-cn/data/jj554735.aspx、
ASP.NET MVC+Entity Framework code first 迁移的更多相关文章
- Asp.net Mvc Entity Framework Code First 数据库迁移
1.创建Mvc项目 2.安装Entity Framework 2.1.如下图打开程序包管理器控制台: 2.2.输入命令Install-Package EntityFramework,即可安装Entit ...
- 使用ASP.NET MVC+Entity Framework快速搭建系统
详细资料: http://www.cnblogs.com/dingfangbo/p/5771741.html 学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和 ...
- ASP.NET MVC - Entity Framework
ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...
- Entity Framework Code First 迁移
Entity Framework CodeFirst数据迁移 http://www.cnblogs.com/aehyok/p/3325459.html Entity Framework Code Fi ...
- ASP.NET MVC+Entity Framework 访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- 使用ASP.NET MVC+Entity Framework快速搭建博客系统
学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和分享. 首先,得确定需求,木有需求的话,那还搞个毛线呀!嗯……大致思考了一下,终于得出如下需求: 1.能自定义 ...
- ASP.NET MVC+Entity Framework 4.1访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- Entity Framework Code First迁移基本面拾遗
项目中用到了EF Code First和迁移,但发现有些方面似懂非懂.比如:如何在迁移文件中控制迁移过程?如果在迁移文件中执行SQL语句?如何使用Update-Database的其它参数?数据库在生产 ...
- Entity Framework Code First 迁移数据库
新版EF,系统实现过程中如果对Model进行更改,队形修改数据库并不能正常运行项目,需要借助Code First 手动迁移数据库 首先启用迁移,允许迁移Context Tools->Librar ...
随机推荐
- 大名鼎鼎的RPC和MQ到底有啥区别和联系
RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). R ...
- #C++初学记录(动态规划(dynamic programming)例题1 钞票)
浅入动态规划 dynamic programming is a method for solving a complex problem by breaking it down into a coll ...
- 关于java nio的channel读写的一个困惑
这里提的需求基本都是IM的,IM的解决方案是怎么样的? 网上的需求: 1. 某一用户发了一条信息, 需要服务器反回一个信息(这种最简单) 2. 某一用户发了一条信息,需要服务器广播给所有客户端 3. ...
- 必须要注意的 C++ 动态内存资源管理(五)——智能指针陷阱
必须要注意的 C++ 动态内存资源管理(五)——智能指针陷阱 十三.小心使用智能指针. 在前面几节已经很详细了介绍了智能指针适用方式.看起来,似乎智能指针很强大,能够很方便很安全的管理 ...
- osg::Group源码
osg::Group源码 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library i ...
- RequestUtil 获取网址页面信息
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- Linux安全学习
安全游戏说明 游戏形式帮助初学者学习和实践网络安全,主要是Linux shell命令的练习. https://overthewire.org/wargames/ 二进制 灰帽黑客进阶秘籍之一--lin ...
- kexue shangwang
根据实践,pptp.IPsec甚至OpenVPN等kexue上网法已经无法顺利翻越GFW.通过抓包可知,GFW会将pptp的握手期间的ack包吞掉,导致本地一直无法收到服务器端的响应.而OpenVPN ...
- 【VS开发】MFC学习之 解决StretchBlt()图片缩放绘图失真
vc中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真.在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能:函数从源矩形中复制一个位图到目标矩形 ...
- K8S+GitLab+.net core-自动化分布式部署-2
K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Core DevOps K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Co ...