zoukankan      html  css  js  c++  java
  • 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库

    导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法。这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多。但是EF给我们提供了一种代码先行的方法,极大程度上的方便了应用。


    一、EF的3种工作方式

    1.1,Model First

    这种EF工作流模式仅仅在实体数据库不存在的情况下使用,使用设计器进行Model 先行开发,开发过程为:

    1.在EF设计器里创建model

    2.通过model生成实体Database
    3.通过model自动生成类classes

    1.2,Database First

    与Model First刚好相反,是仅在数据库存在的情况下使用,进行数据库的先行开发,过程为:
    1.创建数据库
    2.在EF设计器里通过已经存在的Database逆向生成工程模型model
    3.通过model自动生成类classes

    1.3,Code First

    这种EF工作流模式既可以在实体数据库本身还不存在下,又可以在实体数据库本身已经存在情况下进行代码的现行开发:

    情况一:实体数据库本身还不存在的情况下开发步骤:

    1.通过代码编写类以及映射关系,即创建了Model
    2.通过Model生成实体数据库
    3.可以应用自EF4.3以后版本提供的Migration(数据迁移)来使我们的实体数据库开发在代码先行的基础上逐步完善。

    情况二:实体数据库本身已经存在下的开发步骤:

    1.使用反向数据库工具生成代码类以及映射关系,即Model
    2.修改Model,可以对Model做一些后期封装
    3.同样可以应用Migration进行现行数据库的修改工作,并不影响以前的数据,只要为Migration修改提供默认值即可。


    二、Code First实现动态建库

    本来是需要我们自己手写类及映射关系,但是EF给我们提供了一种便利:VS——工具——扩展和更新——Entity Framework Power Tools Bata 4。

    安装完了之后,在建好的类库上右击——Entity Framework—reverse engineer code first,然后按照提示,一步一步的创建代码。

    2.1,需要修改的部分


    注意:this.Database.CreateIfNotExists()是调用EF提供的方法,并不是自己创建的。


    2.2,使用

    <span style="font-family:KaiTi_GB2312;font-size:18px;">    public ActionResult CreateDatabase(string txtName,string txtSex) {
    
                Guid guidDatabaseLastNum = Guid.NewGuid();
                string strDbName = "TestCrateDatabase" + guidDatabaseLastNum;
                //连接字符串
                string connectionString = "Data Source=*******; User=sa;Password=********;Initial Catalog=" + strDbName + ";Integrated Security=True";
    
                TestCrateDatabaseContext newDb = new TestCrateDatabaseContext(connectionString);
                return View();
            }
    
        }
    }</span>


    点击按钮,新库就 被创建好了!


    注意点:1,确保系统中Entity Framework的版本一致,不然会出现很多的问题。

    2,注意创建表单中的字段是否含有关键字,当必须包含关键字 的时候,一定要人为的进行处理。


    三、总结

    其实,自己什么都没有做。而且这种实现,真的是超级简单,但是,之前自己为什么一直都不会,还很恐惧。。。我想这次是真的验证了不怕不知道,就怕不知道的名言了。本身EF是给我们提供这种便利的,但是由于自身的知识不足,都不知道有这些东西,所以才是一直都做不出来。

  • 相关阅读:
    GitLab-添加SSH Key亲历教程
    java-数组Array的应用总结
    Java-方法的重载和重写
    JSON-相关的工具收藏分享
    java-无重复的排列组合小技能
    Charles安装与使用
    深拷贝浅拷贝
    文件操作
    列表生成式
    非空即真,非零即真
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010383.html
Copyright © 2011-2022 走看看