zoukankan      html  css  js  c++  java
  • ASP.NET MVC+Entity Framework code first 迁移

    bubuko.com,布布扣

    再来一张,选择 MVC 模版,其他的没选过,不会用 =_=!! 身份验证用个人用户账户,这个是为了偷懒,话说 ASP.NET Identity  还是很给力的,不用白不用 ^_^~

    bubuko.com,布布扣

    点击确定之后,会看到以下界面:

    bubuko.com,布布扣

    解决方案结构:

    bubuko.com,布布扣

    先更新一把先:

    bubuko.com,布布扣

    bubuko.com,布布扣

    好吧,开工吧!!在Models目录下建立博客分类(Category)和博客(Post)两个类,代码贴在下面

    Category:

    bubuko.com,布布扣
    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; }
    
        }
    }
    bubuko.com,布布扣

    Post:

    bubuko.com,布布扣
    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; }
        }
    }
    bubuko.com,布布扣

    好了,接下来就是传说中的DBContext

    ObjectContext:

    bubuko.com,布布扣
    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; }
        }
    }
    bubuko.com,布布扣

    在 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" />

    大概是这个样子的,看下面的图片

    bubuko.com,布布扣

    好吧,接下来就让用数据库迁移功能,让代码在数据库中表现出来。

    bubuko.com,布布扣

    下面这个就是“程序包管理控制台”

    bubuko.com,布布扣

    输入:Enable-Migrations 然后按下“回车”键

    bubuko.com,布布扣

    这个…… 出错了,唉……出师不利啊!!错误原因就是当前项目中存在两个上下文类型,SB VS 不知道要用哪个来生成数据库,所以……

    输入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext  再“回车”

    bubuko.com,布布扣

    又出错了=_=!!

    模型生成过程中检测到一个或多个验证错误:

    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  再“回车”

    bubuko.com,布布扣

    我是猴子请来的逗逼么??

    再来一次吧!!

    输入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext -force  再“回车”

    bubuko.com,布布扣

    搞定了 哈哈哈哈哈……

    他还生成了一些文件,来瞧瞧是什么东西。

    bubuko.com,布布扣

    多了一个 Migrations 目录,和 Configuration.cs 文件,这是个什么东西呢?先不管他。

    接下来是对 Category 做 CRUD 操作,新建一个 Controller

    bubuko.com,布布扣

    bubuko.com,布布扣

    bubuko.com,布布扣

    点击确定之后,奇迹就出现了T T,在浏览器输入:http://localhost:10223/Category

    地址是我的本地地址,请根据实际情况修改。

    bubuko.com,布布扣

    很遗憾,出错了!!!

    因为之前启用数据库迁移之后,并没有让它更新,接下来就让它更新吧!!打开程序包管理器控制台,输入 Add-Migration ini “回车”

    bubuko.com,布布扣

    在 Migrations 目录下又多了个文件

    bubuko.com,布布扣

    是什么东西?先不管它,接着输入:Update-database

    bubuko.com,布布扣

    貌似成功了,看看 App_Data 目录

    bubuko.com,布布扣

    数据库生成好了,再刷新网页

    bubuko.com,布布扣

    终于成功了,哈哈……接着是 Post

    bubuko.com,布布扣

    大功告成!

    来个小小的总结:

    1、上面出现的一些小问题,基本上是由于不细心造成的,所以在接下来的学习中一定要细心

    2、关于“程序包管理器控制台”的知识在这里这里

    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

  • 相关阅读:
    奇数
    简单的登录基于代码的
    偶数
    寻找特定的值
    'k1': 大于66的所有值, 'k2': 小于66的所有值
    差数和
    day1
    页面滑动监听
    jq的ajax初级使用
    在vue中引入swiper
  • 原文地址:https://www.cnblogs.com/nxxshxf/p/6404503.html
Copyright © 2011-2022 走看看