Code First, Database First, Same Time是我理解的asp.net mvc中用到的三种model与数据库对应的方式,肯定是不全面的,理解也有些狭隘,今后随着自己的理解加深再来修改这篇帖子吧。这三种方式在 (www.helpqy.com)中有应用,这里来自我总结一下:

【Code First】

即先写好模型类,然后通过EF自动生成数据库及相应的表。使用MVC自动创建的模板页时,实际上就使用了Code First。当你打开新建工程的时候可以看到,是没有数据库存在的,当你在运行的页面中注册新账号时,系统会自动根据web.config中的配置、ApplicationDbContext中设置的连接字符串以及模型类来生成数据库和表。至于具体怎么生成的,在我的另外一篇帖子里【将SQL SERVER数据库改成MySql】有具体的实现代码,实际上是通过数据库的Initilizer类来创建数据库的。

通过这种方式创建的数据库,在模型类中的成员被修改后,还可以通过VS的"程序包管理器控制台"来同步到数据库,只需要采用数据迁移中的Enable-Migrations, Add-Migrations "XXX"和Update-Database三个步骤即可实现数据库和模型类的同步。

【Database First】

即先创建好数据库和表,然后新建ADO.NET实体数据模型文件edmx,根据VS的引导,选择已经创建好的数据库的某一个表作为数据源,模型类会被自动创建出来。

【Same Time】

Same Time  是我自己想出的词儿,很不专业,就是自己的一个总结。即在代码侧,模型中的ApplicationUser已经创建好了,想另外增加其它的类以及在已有数据库中创建对应的表,这时需要注意一下几点:

(1) 在类的顶部加上[Table('"xxxx表名")]以让该类与表相关。

(2) 在主键字段前面加上[Key]属性。

(3) 如果表中存在多个主键,在主键上除开添加[Key]属性以外,还需要添加[Column(Order = XX列号)]属性,以表明不同主键的顺序。否则会出现“无法确定组合主键排序”的错误。

(4) 新增加的类可以不用放在ApplicationDbContext中,可以创建DataContext来建立Context模型,然后通过linq to sql来访问,但是在实际部署时,这种方式会出现访问冲突错误,因此还是建议在ApplicationDbContext中,定义该新建模型类的DbSet,然后通过ApplicationDbContext这个统一的入口来访问。

Code First, Database First, Same Time区别的更多相关文章

  1. C语言编译数组中有的加code有的不加,有什么区别

    像uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};和uchar ds1302[]={0xfe,0xfd,0xfb,0xf7,0 ...

  2. keil中 code、data、idata的区别

    存储器类型 本C51编译器支持8051及其派生类型的结构能够访问8051的所有存储器空间具有下表列出的存储器类型的变量都可以被分配到某个特定的存储器空间.存储器类型 描述code 程序空间64 Kby ...

  3. sqlite: Error Code : 5 (SQLITE_BUSY) (database is locked (code 5): , while compiling: PRAGMA journal_mode)

    今天遇到了一个很奇怪的问题,登录完成后,程序会莫名crash, 报了下面的错误: sqlite: Error Code : (SQLITE_BUSY) (database is locked (cod ...

  4. 如何正确地使用Entity Framework Database First

    毕设依旧在不紧不慢地以每天解决一个问题的进度进行中.今天遇到的问题就是在建立数据模型时遇到的.因为项目是基于数据库构建的,所以理所应当地采用DB First来构造实体类和DbContext类.于是想也 ...

  5. 如何在WSL下使用VS Code

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.本有由葡萄城技术团队翻译并整理 自微软开始宣布拥抱开源以来,我认为微软发布的最棒的两大功能是:Visual S ...

  6. MySQL主从复制中断,报“Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217” 错误

    前几天,发现从库挂了,具体报错信息如下: 分析思路 1. 因为我采用的是选择性复制,只针对以下几个库进行复制: card,upay,deal,monitor,collect.所以,不太可能出现对于sa ...

  7. Code First :使用Entity. Framework编程(8) ----转发 收藏

    第8章 Code First将走向哪里? So far, this book has covered all of the Code First components that reached the ...

  8. Code First :使用Entity. Framework编程(6) ----转发 收藏

    Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置,创建过程和种子数据 In prev ...

  9. Code First :使用Entity. Framework编程(1) ----转发 收藏

    这个是在学习EF CodeFirst时发现的,对于初学者还是不错的.果断转发,方便自己以后查阅和学习. 对于学习Code First 这个教程讲解的还是很详细. 第一章:欢迎来到Code First ...

随机推荐

  1. hadoop的两大核心之一:HDFS总结

    什么是HDFS? hadoop distributed file system(hadoop分布式文件系统) 是一种允许文件通过网络在多台主机上分享的文件系统, 可让多机器上的多用户分享文件和存储空间 ...

  2. debian7(wheezy)升级安装mercurial hg最新版2.8-RC,解决tortoisehg2.9.2不能使用。

    debian&(wheezy)之前的仓库版本是2.2.2.  注: 本文以 # 为开始的行是工作在root下的模式,在终端显示为root的提示符# ,用户目录的($:)需要切换到root(使用 ...

  3. unigui session超时时间设置

    unigui session超时时间设置 默认的SESSION超时时间是10分钟. 网络 SOCKET 程序,像 数据库,中间件,UNIGUI等...为了防止过多的僵死连接卡死服务端,服务端都会主动踢 ...

  4. C#生成指定长度随机数

    public static string GetRandomString(int iLength) { ";// 随机字符中也可以为汉字(任何) StringBuilder sb = new ...

  5. Winform 自定义窗体皮肤组件

    分享一个很久之前写的一个Winform换肤组件. 主要利用CBT钩子,NativeWindow来实现.可实现动态换皮肤插件修改窗体显示外观. 我们先定义一个自定义组件 using Skin; usin ...

  6. SQL2014 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    管理员身份运行 cmd ->  输入 netsh winsock reset

  7. [实战演练]Intel面试题目 - 进栈出栈顺序问题

    电话面试中写C++,逻辑比较清楚的一个题目,一紧张就不能好好地写下来,漏洞百出.以前经常在完善的编译环境中写代码,换了一个白板子上写反而写的不通顺了,犯了一些基础错误,比如stack中的首个元素是to ...

  8. linux服务器ssh免密码登录

    假设有三台服务器的ip分别是10.9.1.101.10.9.1.102.10.9.1.103 修改hosts文件 分别修改三台服务器的hosts的文件(vi /etc/hosts), 在hosts文件 ...

  9. Others - On Duty

    On Duty This is xxx and will be duty engineer in the next week. Thanks. Here is a kindly reminder. T ...

  10. eclipse安装STS遇到的问题

    eclipse安装STS时,在eclipse marketplase中搜索STS没有结果,从官网下载STS包,然后安装提示找不到JAR包, 解决方式: eclipse需要和STS包版本一致,如果STS ...