Code First, Database First, Same Time区别

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区别

时间: 2024-10-16 08:02:10

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

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

像uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};和uchar ds1302[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};都能运行,两者有什么区别 C在定义数组时是占用内存空间的,而code是编码的意思,在定义编码时是直接分配到程序空间的,编译后编码占用的事程序存储空间而非内存空间. 在有些时候,定义的数组中包含的元素比较多的时候,数组的所占的存储空间就会大一些,而不希望其影响内

keil中 code、data、idata的区别

存储器类型 本C51编译器支持8051及其派生类型的结构能够访问8051的所有存储器空间具有下表列出的存储器类型的变量都可以被分配到某个特定的存储器空间.存储器类型 描述code 程序空间64 Kbytes :通过MOVC @A+DPTR 访问data 直接访问的内部数据存储器:访问速度最快128 bytesidata 间接访问的内部数据存储器 :可以访问所有的内部存储器空间 256 bytesbdata  可位寻址的内部数据存储器:可以字节方式也可以位方式访问16bytesxdata  外部数

微信支付获取code 和获取权限时的区别

参数:appid:公众号的唯一标识  redirect_uri:重定向的url,就是授权后要跳转的页面  scope:应用授权作用域 snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid snsapi_userinfo:弹出授权页面,可通过openid拿到昵称.性别.所在地 state:重定向后带的参数

[转] 数据库中Schema和Database有什么区别

原文链接:http://blog.163.com/baibai_zheng/blog/static/51980755201022125325689/ 前言:最近接触 Laravel 的数据库迁移, 代码里的 Schema 让我对 Database 以及 两者的区别有点蒙圈了,然后就有了这篇转载. 在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==>datab

python import 与 from .... import ...区别

在python用import或者from...import来导入相应的模块. 模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候, 直接把相应的模块导入到我们的程序中,我们就可以使用了. pycharm 工具 #!/bin/python # filename:test.py import time; print time.ctime() time.sleep(5) print time.ctime() 打印: C:\Python27\python.exe C:

【译著】Code First :使用Entity. Framework编程(6)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置,创建过程和种子数据 In previous chapters you have

【译著】Code First :使用Entity. Framework编程(1)

参考页面: http://www.yuanjiaocheng.net/entity/Persistence-in-EF.html http://www.yuanjiaocheng.net/entity/crud-in-connected.html http://www.yuanjiaocheng.net/entity/crud-in-Disconnected.html http://www.yuanjiaocheng.net/entity/add-entity-in-disconnected.h

实例分析C++中重载、重写(覆盖)和隐藏的区别

函数重载: 在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,即函数重载. 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. class A{ public: void test(int i); void test(double i); void test(int i, double j); void test(double i, int j); int te

Oracle global database name与db link的纠缠关系

ORACLE数据库中Global Database Name与DB LINKS的关系还真是有点纠缠不清,在说清楚这个关系前,我们先来了解一下Global Database Name的概念 Global DataBase Name 概念 1. What is a global database name? ------------------------------------------------------------------------------- The global databa