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);
}

 

posted @ 2018-01-17 21:41  ProZkb  阅读(235)  评论(0编辑  收藏  举报