1.建立Users和UserInfos两个实体类 对应的是数据库中的表

 public class User
{
//类名+Id(User+Id)组成的字符串在数据库表中会设置该字段是主键且是按1的增量增长
public int UserId { get; set; }
public string UserName { get; set; }
}

UserInfos表

 public class UserInfo
{
public int UserInfoId { get; set; }
public string UserAddr { get; set; }
public int UserTel { get; set; }
public char Sex { get; set; }
public int UserPost { get; set; }
//这里表之间的联系,User实体与UserInfo,会把User表的主键生成对应生成UserInfo表外键
public virtual User User { get; set; }
}

自动生成数据库表:

2.建立一个操作数据库的实体类EntityFrameworkModel,必须继承DbContext(通过此类来操作数据库),该类里面的 Users和UserInfos就是在数据库中生成的表

//管理数据实体(对应数据库中的表);通过这个类可以完成对数据增删改查
public class EntityFrameworkModel : DbContext
{
//根据这里字段名生成是数据库的表名
public DbSet<User> Users { get; set; }
public DbSet<UserInfo> UserInfos { get; set; } }

3.在配置文件中添加连接数据库的的字符串     注:配置文件的 name值 必须与 操作数据库的实体类的类名 一致

 <connectionStrings>
<!--注意这里的name的值必须与管理数据实体类名一样,否则会无法生成数据库-->
<!--连接字符串connectionString的database的值可任意,该值就是对应数据库名-->
<add providerName="System.Data.SqlClient" name="EntityFrameworkModel"
connectionString="Server=.;Database=EntiyFrameWork;Integrated Security=true"/>
</connectionStrings>

上面的操作就可以生成一个无数据的数据库了 当然你也可以在代码实现在数据库生成的时候给数据库加载数据

创建一个加载数据的LoadData类(这里我就每个表添加两条数据了)

 //这里要继承 :DropCreateDatabaseIfModelChanges<EntityFrameworkModel>类,
//当模型类结构改变的时候就会重新加载数据(这里的模型类就是User UserInfo)
public class LoadData:DropCreateDatabaseIfModelChanges<EntityFrameworkModel>
{ protected override void Seed(EntityFrameworkModel context)
{
//创建User集合
List<User> users = new List<User>{
new User(){UserName="张三"},
new User(){UserName="金三胖"}
};
//创建UserInfo集合
//User=users.Single(u=>u.UserName=="张三") 用linq表达式添加数据(实际是把user表的id添加到userinfo中)
List<UserInfo> userlist = new List<UserInfo> {
new UserInfo(){ Sex='n', User=users.Single(u=>u.UserName=="张三"), UserAddr="天国", UserTel=119, UserPost=11},
new UserInfo(){ Sex='s', User=users.Single(u=>u.UserName=="金三胖"), UserAddr="天国", UserTel=119, UserPost=22},
};
//把数据添加到管理数据实体中,通过这个实体吧数据加载到数据库中
foreach(UserInfo u in userlist){
context.UserInfos.Add(u);
} }
}

注意:还需在全局文件中的Application_Start()加上一句加载数据库数据的代码

protected void Application_Start()
{
//当网站第一次运行时就加载数据库数据
System.Data.Entity.Database.SetInitializer(new Entity_Framework的使用.Models.LoadData());//向数据库添加数据
//System.Data.Entity.Database.SetInitializer(new OdeToFoodDBInitializer());
AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}

这样当数据库生成的时候就可以加载数据了

在控制器中操作数据库就可以了,,这样就不用通过编写大量的sql语句来查询数据了

public ActionResult Index()
{
int count = ef.Users.Count();//获得User表总共有多少条
List<User> u = ef.Users.ToList();//获得User的全部数据;
User user = ef.Users.FirstOrDefault(us => us.UserId == 1);//获得id为1的数据 //ef.Users.Remove(new User(){ UserId=1});//删除数据,这里传通过一个User实体来删除数据
//ef.SaveChanges();执行删除 //ef.Users.Add(new User() { UserName = "新增数据" });//添加数据,这里传通过一个User实体来添加数据
//ef.SaveChanges();执行添加 //更新数据 首先要查询该条数据 然后更新该实体的值 最后执行mbsc.SaveChanges();就可以更新成功了
//user.UserName = "更新了";//把刚刚查询出的数据更改名字
//ef.SaveChanges();return View();
}

好了这次就说到这里··如有错误欢迎大家指正~!!!

在MVC3中使用code first生成数据局库并操作数据库的更多相关文章

  1. 重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 难以跨越的瓶颈期,把你拿捏滴死死的! 编程开发学习过程中遇到的瓶颈期,往往是由于看不 ...

  2. python生成数据后,快速导入数据库

    1.使用python生成数据库文件内容 # coding=utf-8import randomimport time def create_user():    start = time.time() ...

  3. MVC3学习:基于ObjectContext的数据增删改查操作

    数据库里面的表格,映射为对应的实体类.实体类的编写,可以自己手动编写,也可以使用工具或插件自动生成.在MVC3里面,我们可以使用VS的POCO插件自动生成实体类.如下图: 关于POCO插件的安装与使用 ...

  4. 利用Sql实现将指定表数据导入到另一个数据库示例

    因为工作中经常需要将数据从一个数据库导入到另一个数据库中,所以将这个功能写成一个存储过程,以方便调用.现在粘贴出来供大家参考: 注意:1,以下示例中用到了syscolumns,sysobjects等系 ...

  5. java web从零单排第十七期《struts2》数据标签库(1)

    1.s:action标签: 此标签的作用是在JSP页面中访问action类的数据,执行某些操作,并返回相应的数据.其属性及意义如下: 属性名 是否必需 默认值 类型 说明介绍 executeResul ...

  6. ASP.NET MVC3中Controller与View之间的数据传递总结

    一.  Controller向View传递数据 1.       使用ViewData传递数据 我们在Controller中定义如下: ViewData["Message_ViewData& ...

  7. ASP.NET MVC3中Controller与View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向Vie ...

  8. EF 中 Code First 的数据迁移以及创建视图

    写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...

  9. java 通过接口在后台管理器中生成数据

    需求:测试人员在后台批量添加数据很麻烦,特别是针对一款商品配置了英语,还需要手动添加法语.俄语.阿拉伯语,很麻烦,但是因为没有项目组配合,做个小工具批量生成数据就只有自己去研究了 第一步:通过抓包工具 ...

随机推荐

  1. JS代码放置位置、变量与数据类型、运算符与逻辑表达运算符

    内容简要: 1.JS代码放置位置的问题: 2.变量与数据类型: 3.运算符与逻辑表达式的运算符   我的位置 全局问题:为何在网页推荐位置(一般在<head></head>内部 ...

  2. Studio for WPF:使用 C1TileView 创建图片库

    C1TileView 提供了数据交互浏览的功能.允许我们设置最大化和最小化浏览模板,我们可以通过最小化模板快速定位详细浏览选项. 下面我们分步分享实现方法: 1.添加 C1TileView 到窗体,并 ...

  3. [PHP] 自动加载的实现

    基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php|--Service |-- ...

  4. 隐藏android系统标题栏和状态栏

    //隐藏系统title requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏 getWindow().addFlags(WindowManage ...

  5. jquery fadeOut 异步

    1. 概述 jquery实现动画效果的函数使用起来很方便,不过动画执行是异步的, 所以要把自定义的操作放在回调函数里. 2. example <html> <body> < ...

  6. Android Studio使用教程(一)(转)

    今年的Google全球开发者大会虽然没有新的Android系统和设备,但是还是推出了一些不错的产品,Android Studio就是其中之一.这个基于Intellij IDEA开发的Android I ...

  7. mybatis3批量更新 批量插入

    在公司ERP项目开发中,遇到批量数据插入或者更新,因为每次连接数据库比较耗时,所以决定改为批量操作,提升效率.库存盘点导入时,需要大量数据批量操作. 1:数据库连接代码中必须开启批量操作.加上这句,& ...

  8. React入门--------组件API

    setState 参数:nextState(object),[callback(function)] 设置nextState的某个键值.通常如果希望在某个事件或某个回调中来重新渲染组件,setStat ...

  9. js中this的理解

    平常用this很多,对this的理解就是this是对应执行环境,然而很多时候效果并不是想要的,最近看了一些谈到this的笔记和书籍,总结下. 对this的误解: this是指向函数本身 先上个demo ...

  10. 设置ArcGIS的外观改回到出厂

    在一般的软件中,都可以在工具-选项中打开相关设置将应用程序的外观改回到出厂.但ArcGIS好像没有,但查帮助文档原来是这样: 配置的更改保存在模板文档中(例如,ArcMap 将其更改保存在 Norma ...