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. C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限

    C#修改文件或文件夹的权限,为指定用户.用户组添加完全控制权限 public void SetFileRole(string foldPath) { DirectorySecurity fsec = ...

  2. WPF学习之深入浅出话命令

    WPF为我们准备了完善的命令系统,你可能会问:"有了路由事件为什么还需要命令系统呢?".事件的作用是发布.传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件 ...

  3. iis7.5错误 配置错误

    iis7.5详细错误   HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 ...

  4. 当kfreebsd 用户遇见openSUSE系统

    openSuse的系统工具集覆盖了四大主流桌面环境,是针对每一种桌面环境定制的独立的桌面体验.

  5. SharePoint 2013 内容部署功能简介

    在之前的项目中,当客户有新的需求的时候,我们通常在测试环境上开发或者实施,然后手动在生产环境再弄一次.当发现内容部署这个东西,才知道这样是多么不合理的.我们可以创建两个网站集,一个用来修改,然后通过计 ...

  6. 通用javascript方法

    //将序列化成json格式后日期(毫秒数)转成日期格式 YYYY-MM-DD HH:MI:SS function ChangeDateFormat(cellval, type) { var date ...

  7. SharePoint固定的Footer

    原文地址:http://www.eliostruyf.com/sticky-footer-solution-for-sharepoint-2013/ 照搬全文: OFFICE 365 & SH ...

  8. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q125-Q126)

    Question 125You are creating an application for SharePoint Server 2010.The application will run on a ...

  9. iOS 模仿微信的照片选择器

    功能和微信的基本一致. 这个选择器使用了循环方式,保证在浏览图片时内存中只加载最多3张图片.稳定的内存大小,可定义图片尺寸.详细说明在github. 下载地址: https://github.com/ ...

  10. java多线程系列6-阻塞队列

    这篇文章将使用经典的生产者消费者的例子来进一步巩固java多线程通信,介绍使用阻塞队列来简化程序 下面是一个经典的生产者消费者的例子: 假设使用缓冲区存储整数,缓冲区的大小是受限制的.缓冲区提供wri ...