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

    确认无误后运行:

    自动生成的数据库和表

    插入的数据:

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

  • 相关阅读:
    【漏洞复现】CVE2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现
    PAT顶级 1001 Battle Over Cities Hard Version (35 分)(最小生成树)
    Leetcode 1001. 网格照明(map)
    2022牛客寒假算法基础集训营4 ABCDEFGHIJK
    KD Tree 模版
    PAT顶级 1003 Universal Travel Sites (35 分)(DP)
    CCFCSP认证 2021123 登机牌条码(90分)
    Leetcode 956. 最高的广告牌(DP)
    Codeforces Round #774 (Div. 2) C. Factorials and Powers of Two(暴力/dfs/位运算)
    第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(上海)I. Steadily Growing Steam(DP)
  • 原文地址:https://www.cnblogs.com/yanxh/p/10020368.html
Copyright © 2020-2023  润新知