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实体模型大进数据库

创建Data Modelà创建Database Contextà创建databaseInitializerà配置entityFramework的context配置节

1.创建一个新的空的MVC架构

11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
在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 )

222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
创建 Database Context
前置条件:安装EF

打开 工具à库程序包管理器à程序包管理器控制台

输入 install-package entityframework
NOTE

微软官方推出的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语句的步骤。
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
创建类 AccountContext.cs , 让他继承自System.Data.Entity.DbContext, ----------我们用AccountContext.cs 这个类完成EF的功能。-----------

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
NOTE 表名用单复数形式看各自的习惯,没有明确的规定。有的公司表名全用单数,有的公司根据表的意思,有单数也有复数。

默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。
444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444

<!--第一步:先把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文件夹下。
5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555

创建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();
}
}
666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
修改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>
}
////AccountContext 谁继承dbContext 实例化谁
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);

}
---------------------------------Control----------------------------------------------------------------------------------------------------

EF搭建数据库的更多相关文章

  1. EF搭建可扩展菜单

    EF实现可扩展性菜单 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...

  2. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  3. 用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库

    上一篇介绍了如何用express搭建起服务端MVC的开发架构,本篇我们来详细介绍一下这个Model层,也就是数据库访问层.包含如何使用mongodb搭建数据库,以及如何使用mongoose来访问数据. ...

  4. [翻译 EF Core in Action 2.3] 理解EF Core数据库查询

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  5. asp.net core 系列 21 EF现有数据库进行反向工程

    一.概述 在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型.  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序.已有 ...

  6. EF操作数据库的步骤和一些简单操作语句

    这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...

  7. EF访问数据库报“ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。”错误

    我发生这个问题的原因是因为我用EF访问数据库时用的用到了两用方式,如下图 第一种方式访问时不会出现此错误,出现错误的是第二种方式,下图是dal层代码 其中红框中的代码是出现错误之后改正的代码,也就是说 ...

  8. EF 创建数据库的策略 codefist加快效率!【not oringin!】

    今天去搜寻,ef创建数据库的策略有四种,区分还是和数据库里sql的创建的语句这些英文差不多一致. 一:数据库不存在时重新创建数据库 Database.SetInitializer<testCon ...

  9. yii:高级应用程序搭建数据库的详细流程

    上一章已经把高级应用程序的环境搭配成功,那么下一步就是搭建数据库了. 首先,我们先去创建一个数据库,比如:demo 创建完之后,我们重要的就是将文件中的数据进行一个更新,在www/advancend/ ...

随机推荐

  1. Struts2的struts.xml的标准配置文档

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  2. Spring 注解拦截器使用详解

    Spring mvc拦截器 平时用到的拦截器通常都是xml的配置方式.今天就特地研究了一下注解方式的拦截器. 配置Spring环境这里就不做详细介绍.本文主要介绍在Spring下,基于注解方式的拦截器 ...

  3. CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法

    CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法 CentOS 7.4 中, 网卡命名方式发生改变, 可预测功能命名: 网卡简要名称组成格 ...

  4. vue之filter用法

    1.全局写法: 全局过滤器必须写在vue实例创建之前. Vue.filter('testfilter', function (value,text) { // 返回处理后的值 return value ...

  5. shell脚本不同运行方式的差异

    说明:以下是个人的见解,不一定都正确,如有错误,欢迎指正! 一,shell脚本的运行方式,最常见的有以下几种: 1 )  . xxx.sh,注意,前面是一个点'.' 2 ) source xxx.sh ...

  6. 紫书 例题 10-25 UVa 1363(找规律)

    可以发现余数是成一段一段的等差数列的. 在商数同的时候,余数是成首项为第一个数的余数,公差 为商数的等差数列. 利用这个性质求解即可. #include<cstdio> #include& ...

  7. 一个最不可思议的MySQL死锁分析

    1    死锁问题背景    1 1.1    一个不可思议的死锁    1 1.1.1    初步分析    3 1.2    如何阅读死锁日志    3 2    死锁原因深入剖析    4 2. ...

  8. 一 SSH 无密码登陆 & Linux防火墙 & SELinux关闭

    如果系统环境崩溃.   调用/usr/bin/vim /etc/profile   SHH无密码登陆 所有要做得节点上运行   修改 host name vi /etc/sysconfig/netwo ...

  9. postgresql拓展if、ifnull、group_concat函数

    postgresql版本是8.2.15. 最近陆续有数据分析师从impala.hive转到查询gpdb,gpdb虽然能够支持在查询语句中带多个distinct,但是缺少相应的if.ifnull.gro ...

  10. 网络载入数据和解析JSON格式数据案例之空气质量监測应用

    一.创建一个新的项目 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...