zoukankan      html  css  js  c++  java
  • EF1:MVC/EF(Entity Framewok) /First Migrations

    1. 概念

      Entity FrameworkADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.(此处只当理解为.NET 特色的数据库应用方案(O/R mapping),如hibernate, 此处暂且不做深入,有待日后补充学习)。简单来说就是微软帮你连接了数据库的是一个实体框架,让你操作起来比较方便,不用过多去写SQLhelper并能和linq语句lamda表达式等结合起来,提高开发效率。

      First Migrations: .Net 数据库迁移工具,应用于结合EF进行数据库管理应用。

    2.通过项目运行数据库

      1.数据库连接配置。项目 web.config中添加数据库连接相关:

    复制代码
    <connectionStrings>
      <add name="DefaultConnection" 
           connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-MvcMovie-2012213181139;Integrated Security=true" 
           providerName="System.Data.SqlClient" 
      />    
      <add name="MovieDBContext" 
           connectionString="Data Source=(LocalDB)v11.0;AttachDbFilename=|DataDirectory|Movies.mdf;Integrated Security=True" 
           providerName="System.Data.SqlClient" 
      /> 
    </connectionStrings>   
    复制代码

     2.先构造实体类和上下文关联,如3中类代码。

      3.通过项目代码运行private PortalContext db = new PortalContext();自动生成数据库。常见初学教程mvc

    通过control 生成示例:

    微软 MVC 教程 通过control 模板生成Movie 增删改查相关操作。

    注:为了继续学习3中first migrations数据迁移,删除App_data中数据库文件*.mdf.

    3. First migrations应用举例

    •   生出数据库实体关联

        需要先构造实体类(对应表)和上下文关联,代码如下:        

    复制代码
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    
    namespace MVCEFTest.Models
    {
        public class Movie
        {
            public int ID { set; get; }
            public String Name { set; get; }
            public Double Price { set; get; }
            public int Level { set; get; }
        }
    
        public class People
        {
            public int ID { set; get; }
            public String Name { set; get; }
            public int Year { set; get; }
        }
    
        public class PortalContext : DbContext
        {
            //静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。
            //static PortalContext()
            //{
            //    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
            //}
    
            public DbSet<Movie> Movies { get; set; }
            public DbSet<People> Peoples { get; set; }
       }
    
    }
    复制代码
    复制代码

        点击“工具/库程序包管理器/程序包管理控制台”,打开程序包管理控制台:

        如果未添加 Entity Framework ,先安装Entity Framework:    

    PM> Install-Package EntityFramework

        执行

    PM> Enable-Migrations -EnableAutomaticMigrations
    已为项目 MVCEFTest 启用 Code First 迁移。

    执行成功,项目中添加了Migrations文件夹,并生成类文件Configuration.cs。代码如下namespace MVCEFTest.Migrations

    复制代码
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Migrations;
        using System.Linq;
    
        internal sealed class Configuration : DbMigrationsConfiguration<MVCEFTest.Models.PortalContext>
        {
            public Configuration()
            {
                AutomaticMigrationsEnabled = true;
            }
    
            protected override void Seed(MVCEFTest.Models.PortalContext context)
            {
                //  This method will be called after migrating to the latest version.
    
                //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
                //  to avoid creating duplicate seed data. E.g.
                //
                //    context.People.AddOrUpdate(
                //      p => p.FullName,
                //      new Person { FullName = "Andrew Peters" },
                //      new Person { FullName = "Brice Lambson" },
                //      new Person { FullName = "Rowan Miller" }
                //    );
                //        

    } } }

    复制代码

    seed为初始化执行代码,如上可通过 context.People.AddOrUpdate 添加数据。

    •   数据数据库实体(O/R mapping)修改   

    PM> Add-Migration initial
    正在为迁移“initial”搭建基架。
    此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 201601120840091_initial”重新搭建基架。
    PM>

    在Migrations文件夹中生成 201601120840091_initial.cs。

    •    数据库同步(数据迁移)
    复制代码
    PM> Update-Database -Verbose
    Using StartUp project 'MVCEFTest'.
    Using NuGet project 'MVCEFTest'.
    指定“-Verbose”标记以查看应用于目标数据库的 SQL 语句。
    目标数据库为: “MVCEFTest.Models.PortalContext”(数据源: (localdb)v11.0,提供程序: System.Data.SqlClient,来源: Convention)。
    无任何待定的基于代码的迁移。
    正在运行seed方法。
    复制代码

    4. 错误记录

      应用本地sql server 应用实例,生成第一次完成后,删除mdf,重新生成有时会造成,形式各种的数据库链接错误。

    大多如,connectstring 错误,*.mdf找不到等,因本地备份遗留或者名称不对应等。可通过“视图/sql server 管理器”删除/增加(如有遗留请删除,如未有重新请添加)操作可解决,已验证:

    打开vs2013的sql对象资源管理器,

    删除(LocalDb)v11.0服务器下面已经存在的数据库

    (LocalDb)v11.0如果不存在,就先添加,,再删除它下面的数据库。

  • 相关阅读:
    jquery插件之jquery.extend和jquery.fn.extend的区别
    block,inline和inline-block的区别
    css 中 div垂直居中的方法
    Native App vs Web App 以及 Hybrid App的实现原理
    小结
    传输层的端口与TCP标志中的URG和PSH位
    常见路由表生成算法与收敛路由
    NAT技术与代理服务器
    CRC校验
    BinarySearchTree-二叉搜索树
  • 原文地址:https://www.cnblogs.com/zxtceq/p/7514726.html
Copyright © 2011-2022 走看看