zoukankan      html  css  js  c++  java
  • Code First添加一个现有数据库中的表

    描述

    刚刚使用EF,还没搞明白,遇到下面问题,记录一下。

    都说Entity Framework好用,一直也没用过,以前写代码都是ADO.NET,写起来费时费力还没什么大进展,如果能把这些事简化一下把精力放到逻辑或者更有用的地方岂不是更好。所以想使用Entity Framework的Code First方式。

    Code First,从字面的意思来看是先有代码后有数据库,通过代码中的Model来创建数据库,好像只能是通过Model来生成数据库,至少我接触2天以来是这样。

    如果我已经有一个数据库了,而我又想用Code First怎么办?

    Code First添加现有数据库

    Visual Studio 2015有一个功能,添加Code First From Database,通过这个工具生成我们需要的Model和DbContext。

    这个时候我们应该就可以享受Entity Framework带给我们的方便快捷了。

    但是如果的表结构需要变化怎么办?

    Migrations

    这个工具可以让我们做到,只要Model有变化我们可以通过一个命令行把已有的变化同步到数据库中,使我们的Model和数据库表结构一致。

    Migrations使用方法:https://msdn.microsoft.com/zh-cn/data/jj591621

    这个工具是可以同步我们的字段,但是同步的时候会从新创建一次数据表,提示错误表对象已经存在,这是因为,Migrations认为我们刚刚通过VS生成的Model是新建的表,所以他要先数据库里创建一次表。

    那我的Model刚刚生成的时候和数据库中的结构是一样的,有没有办法让Migrations知道,不需要重新创建表了?

    让Migrations认识数据库中的表

    下面这个视频已经给我们答案了,将现有表加入到Migrations中的方法:https://channel9.msdn.com/Blogs/EF/Migrations-Existing-Databases

    其实很简单。

    1、使用ADO.NET实例数据模型工具,来自数据库的Code First(VS2015),将需要的表的Model生成到项目中,这个时候必要的Model模型已经出来了。

    2、我做的时候把生成模型的DbContext删除掉了,用我自己的DbContext,如果自己没创建过用生成的也可以,毕竟有那么多的DbContext连接的功能还是一样的看起来很碍眼,把生成的DbSet复制到自己的DbContext中。

    3、Enable-Migrations 命令,上边有具体这个使用方法

    4、使用Add-Migrations –Name Initial -IgnoreChanges,这里的IgnoreChnages参数是重点,忽略我们代码中的变化,然Migrations认为我们的代码已经和数据库中的表格式一样了,本来我们就是一样的,我们刚刚通过VS工具生成的,这个时候还没有完成任务,数据库那边并不知道你干了什么,这里只是添加了一个计划,Update-Datebase才能使我们的命令生效。

    5、输入Update-Database,这个时候应该就可以了,以后在有表结构变化,修改model然后使用Migrations更新就可以了。

  • 相关阅读:
    Oracle 实现自动递增的功能
    解决升级chrome导致“Silverlight ”插件失效
    解决笔记:转载篇
    MSP432在CCS上新建工程,导入固件库
    操作系统复习文档
    数据结构
    数据结构
    蓝桥
    ACM山东工商 数据结构与算法 第3章 双向栈的操作
    ACM山东工商 栈和队列算法练习
  • 原文地址:https://www.cnblogs.com/qiumc/p/5122917.html
Copyright © 2011-2022 走看看