zoukankan      html  css  js  c++  java
  • EF CodeFirst 实例Demo

    一直想搞一个EFCodeFirst的Demo,让自己通过实例真正了解CodeFirst,方便以后有需求的时候可以有思路。网上查了很多资料,发现很多博主的文章大量重复,根据推荐步骤走并不一定能够成功,而且有些注意点没有讲清楚,导致我花费了很长时间才搞定。

    现在把具体步骤写出来,总结,记录,分享下EFCodeFirst的精简实例。

    Mysql的安装步骤不再给出,安装过程对本实例没有影响,只要记住mysql的root账号密码即可。

    Mysql安装完成后需要能使用MySql WorkBench登陆,并看到本机所有的数据库(后面会用到)。

    环境:

    • VS2017
    • .net v4.0
    • Mysql v5.7
    • EntityFramework v6.0
    • MySql.Data v6.9.12
    • MySql.Data.Entity v6.9.1
    • 新建项目

    新建控制台项目,命名随意,我名称设置为EFCodeFirstDemo

    • 添加必要引用

    当前项目名称上,右键-管理NuGet程序包,安装下图中的组件包,注意对应的版本(版本不同可能会有一些影响,具体未知,有时间的话可以研究下不同版本的效果)

    在VS2017中,点击程序包后,右侧可选择安装版本

    • 编辑数据库连接字符串

     在App.config中插入如下字符

      <connectionStrings>
        <add name="MyContext"
             connectionString="Server=127.0.0.1;port=3306;Initial Catalog=CodeFirstDemoDB;uid=root;pwd=mysqlroot;" providerName="MySql.Data.MySqlClient"/>
      </connectionStrings>
    Server:数据库地址
    port:数据库端口
    Initial Catalog:本项目对应的数据库名称(此时数据库可不存在,程序运行后会自动创建,不要用在数据库连接工具中手动创建的,否则程序不会再自动创建表)
    最终的App.config文件内容如下,有不同的建议酌情修改,但不要完全复制:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v13.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider></providers>
      </entityFramework>
      <connectionStrings>
        <add name="MyContext"
             connectionString="Server=127.0.0.1;port=3306;Initial Catalog=efcodefirst;uid=root;pwd=mysqlroot;" providerName="MySql.Data.MySqlClient"/>
      </connectionStrings>
    <system.data>
        <DbProviderFactories>
          <remove invariant="MySql.Data.MySqlClient" />
          <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
      </system.data></configuration>
    • 新建类/表

    using System;
    
    namespace CodeFirstDemo
    {
        public class Student
        {
            public string ID { get; set; }
            public string Name { get; set; }
            public Int32 Age { get; set; }
            public string Sex { get; set; }
            public Boolean State { get; set; }
            public DateTime? CreateTime { get; set; }
        }
    }

    如果没有指定主键ID会被默认设置为主键

    using System.Data.Entity;
    
    namespace CodeFirstDemo
    {
        public class CodeFirstDbContext: DbContext
        {
            public CodeFirstDbContext() : base("name=MyContext")
            { }
    
            public DbSet<Student> Studen { get; set; }
        }
    }
    MyContext为App.Config中<connectionStrings/>对应的的Name
    • 测试代码

    using System;
    
    namespace CodeFirstDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                CodeFirstDbContext db = new CodeFirstDbContext();
                db.Database.CreateIfNotExists();
                for (int i = 0; i < 10; i++)
                {
                    Student s = new Student
                    {
                        ID = Guid.NewGuid().ToString(),
                        Name = "Name-" + i,
                        Age = 10 + i,
                        Sex = "God",
                        State = true,
                        CreateTime = DateTime.Now
                    };
                    db.Studen.Add(s);
                }
                db.SaveChanges();
            }
        }
    }

    确认无误后运行:

    自动生成的数据库和表

    插入的数据:

    以上内容如有纰漏欢迎指出,如在操作过程中有其他疑问也可直接留言

  • 相关阅读:
    2018年强化学习领域十篇重要论文(附源码)[转]
    【转载】 再励学习面试真题 (强化学习面试真题)
    枸杞常泡水喝好吗?
    亲历亚马逊、华为机器学习面试,原来考官想听到这些回答[转]
    阿里面试 深度学习[转]
    强化学习(四)用蒙特卡罗法(MC)求解
    初识kaggle,以及记录 kaggle的使用
    强化学习(三)用动态规划(DP)求解
    CORTEX-M3中断的现场保护问题
    地球是圆的怎么还分东西方
  • 原文地址:https://www.cnblogs.com/yanxh/p/10020368.html
Copyright © 2011-2022 走看看