EF搭建数据库
一键三连:
http://blog.csdn.net/mss359681091/article/details/52135867 http://blog.csdn.net/x_craft/article/details/39438155 http://www.cnblogs.com/Bce-/p/3684643.html实体模型大进数据库
The First Step
在Models建你所用到的表 public class news { public int ID { set; get;} public string Title { set; get;} public string Picture { set;get;} public string Content { set;get;} public DateTime AddTime { set; get; } public string TypeName { set; get; } public int MvcNewsTypeID { set; get;} //这个用来接受外键ID(newstype--》ID ) public virtual newstype newstype { set; get;} //这个就是外键的id } public class newstype { public int ID { set;get; } public string TypeName { set;get;} public virtual ICollection < news > newsss { set;get;} }
对于上面几个类的约定和说明:navigation: 导航
EF生成数据库时,ID 属性将会成为主键。(约定:EF默认会将ID或classnameID生成主键, MSDN建议保持风格的一致性, 都用ID或classnameID, 我们这里都用ID)
EF生成数据库时 , <navigation property name><primary key property name>这种形式的会成为外键. ( 约定 )
例如外键 SysUserID = SysUser(navigation property)+ID(SysUser的主键)
定义为virtual的几个属性是 navigation 属性(virtual非必须, 只是惯例用法, 后面文章将会讲解用virtual的好处).
navigation 属性保存着其他的关联entity(entities)
示例中, SysUser和SysUserRole是一对多的关系, SysRole和SysUserRole也是一对多的关系.
如果是 "多", 属性类型就必须是list( 这里用的是Icollection )
The Two Step
创建 Database Context 前置条件:安装EF
打开 工具à库程序包管理器à程序包管理器控制台 输入 install-package entityframework 微软官方推出的ORM框架主要有Linq to SQL和Entity Framework. EF是目前最新的,也是推荐配合MVC使用的框架。 实际操作前再补充一些重要概念: 如果不用ORM框架,我们一般这样来使用ADO.NET进行数据库开发: 将ADO.NET对数据库的操作封装到一个类里SqlHelper中 在DAL层调用SqlHelper 其他层再调用DAL进行数据库操作 使用ORM之后,以前面的SysUser为例: O(Object) 程序中的类 SysUser, 就是对象 R (Relation) 数据库中的表 M(Mapping) O和R的映射关系 ORM对传统方式的改进: 充当桥梁,实现了关系数据和对象数据的映射,通过映射自动产生SQL语句。 对常用的操作,节省了写SQL语句的步骤。
The Third Step
创建类 AccountContext.cs , 让他继承自System.Data.Entity.DbContext public class AccountContext: DbContext { //指定一个连接字符串 // 构造函数中的 base("AccountContext") 。 // 默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。 public AccountContext(): base("AccountContext") {} //带颜色的是映射的数据库表 public DbSet < SysUser > SysUsers { set; get; } public DbSet < SysRole > SysRole { set; get; } public DbSet < SysUserRole > SysUserRole { set; get;} //下面的必不可少 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove < PluralizingTableNameConvention > (); } }
主要做下面三件事: 为每个entity set创建一个DbSet 在EF中,通常情况下一个entity set对应数据库中的一张表,一个entity对应表中的一行。 指定一个连接字符串 构造函数中的 base("AccountContext") 。 默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。 指定单数形式的表名 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 默认情况下会生成复数形式的表,如SysUsers 表名用单复数形式看各自的习惯,没有明确的规定。有的公司表名全用单数,有的公司根据表的意思,有单数也有复数。 默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。
The Four Step
<!--第一步:先把web.config中连接字符串给指定了。--> <connectionStrings> <add name="AccountContext" connectionString="Data Source=127.0.0.1;database=EESql;Integrated Security=true;AttachDBFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\MVCDemoCode.mdf;" providerName="System.Data.SqlClient" /> </connectionStrings> <!-- 如上图,贴着appSettings配置节上面添加。--> <appSettings>Q u Q</appSettings> NOTE AttachDBFilename=|DataDirectory|\MVCDemo.mdf设定了数据库文件的存放位置:在项目根目录的App_Data文件夹下。
The Five Step
创建Initializer, 使用EF初始化数据库,插入示例数据 新建类AccountInitializer.cs来完成这个工作。 public class AccountInitializer: DropCreateDatabaseIfModelChanges < AccountContext > { protected override void Seed(AccountContext context) { var sysUsers = new List < SysUser > { new SysUser { UserName = "Tom", Email = "Tom@sohu.com", Password = "1", }, new SysUser { UserName = "Jerry", Email = "Jerry@sohu.com", Password = "2" } }; sysUsers.ForEach(s => context.SysUsers.Add(s)); context.SaveChanges(); var sysRoles = new List < SysRole > { new SysRole { RoleName = "Administrators", RoleDesc = "Administrtors have full authorization to perform system administration."}, new SysRole { RoleName = "General Users", RoleDesc = "General Users can access the shared data they are authorized for."} }; sysRoles.ForEach(s => context.SysRole.Add(s)); context.SaveChanges(); } }
The Six Step
修改web.config, 通知EF使用我们刚刚写好的initializer类。 重中之重!!!!!!!!! 1. Install-Package entityframework 2.Enable-Migrations 3. Add-Migration asdass 4.Update-database 还要进行数据迁移:::::::Enable-Migrations
View
@using (Html.BeginForm("Index", "Home", FormMethod.Post)) { <table> <tr><td>用户:</td><td><input type="text" name="email" /></td></tr> <tr><td>登录密码:</td><td><input type="text" name="password" /></td></tr> <tr><td></td><td><input type="submit" value="登陆" /></td></tr> </table> }
Control
private AccountContext MC = new AccountContext(); public ActionResult Index() { //刚开始的时候返回的登陆视图 ViewBag.LoginState = "登陆前0.0"; return View(); } [HttpPost] public ActionResult Index(FormCollection fc) { //获取内容之后进行操作的Login //获取表单数据 string email = fc["email"]; string password = fc["password"]; //var user = db.SysUsers.Where(u => u.UserName==name & u.Password==pwd); var user = MC.SysUsers.Where(b => b.Email == email & b.Password == password); if(user.Count() > 0) { ViewBag.LoginState = email + "登录后。。。"; } else { ViewBag.LoginState = email + "用户不存在。。。"; } return View(); // return Content("欢迎" + name + ",pwd=" + pwd); }
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。