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

    创建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 FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATAMVCDemoCode.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----------------------------------------------------------------------------------------------------

  • 相关阅读:
    linux sed
    linux vim
    linux 文本处理
    Xception: Deep Learning with Depthwise Separable Convolutions
    Residual Attention Network for Image Classification
    ResNeXt:Aggregated Residual Transformations for Deep Neural Networks
    Densely Connected Convolutional Networks
    Deep Pyramidal Residual Networks
    SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
    Wide Residual Networks
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/8306183.html
Copyright © 2020-2023  润新知