• .NET实体框架EF之CodeFirst


      ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。

    一 、引入entityframework实体框架  

      新建项目后,这里我使用的是entityframework连接Mysql数据库:

           项目右击 >> 管理Nuget包 >> 浏览中找到entityframework,下载   >>  找到MySQL.Data.Entity,下载

      entityframework包

      

      MySQL.Data.Entity包:

    二 、添加实体模型Model  

      可以任意创建一个实体测试,其中id无论有用与否都应该默认添加,系统会用作主键,此处我不做设置,待生成数据后查看是否会生产主键。

    using System;
    
    namespace EFDemo.Model
    {
        public class person
        {
            public int id { get; set; }
            public string name { get; set; }
            public DateTime dateTime { get; set; }
        }
    }

    三 、添加数据上下文DbContext  

    using EFDemo.Model;
    using MySql.Data.Entity;
    using System.Data.Entity;
    
    namespace EFDemo
    {
        [DbConfigurationType(typeof(MySqlEFConfiguration))]
        public class EntityDbContext : DbContext
        {
            public EntityDbContext() : base("name=MyStrConn")
            {
    
            }
    
            public DbSet<person> persons { get; set; }
        }
    }

      特别注意:1. [DbConfigurationType(typeof(MySqlEFConfiguration))]特性是指明此处是使用Mysql数据库,否则会默认找sqlserver数据库,这里需要引入using MySql.Data.Entity;名称空间

           2. base("name=MyStrConn")为默认的上下文DbContext传入连接字符串,从其重载重中可以看出一些端倪,链接字符串只支持这种格式即 “name=ConnectionString(配置节名)”的格式

      这里展示一下非name的错误:

    四 、当使用mysql时的配置  

      当添加MySQL.Data.Entity后会默认生成配置App.config配置文件,在配置中加入mysql的链接字符串如下,并且节点名需要与三中的base("name=MyStrConn")名称一致。

    <connectionStrings>
        <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Server=127.0.0.1;Database=eftest; User=root;Password=root;"/>
      </connectionStrings>

      通过下面默认生成的配置中可以看到providers中增加了配置节点provider为mysql的配置。

    <?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>
      <connectionStrings>
        <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Server=127.0.0.1;Database=eftest; User=root;Password=root;"/>
      </connectionStrings>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="mssqllocaldb" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
          </provider></providers>
      </entityFramework>
    </configuration>

     五 、测试函数及结果  

      下面是插入一条数据:

    namespace EFDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                EFDemo.Model.person p = new Model.person();
                p.name = "测试成功";
                p.dateTime = DateTime.Now;
                using (EntityDbContext entity = new EntityDbContext())
                {
                    entity.persons.Add(p);
                    entity.SaveChanges();
                }
            }
        }
    }

      数据库插入数据成功,并且将id设置为主键了:

      我的测试Demo: 欢迎点击下载    提取码:dt6d

  • 相关阅读:
    所谓的日常 #8
    所谓的日常 #7
    所谓的日常 #6
    所谓的日常 #5
    所谓的日常 #4
    所谓的日常 #3
    DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)
    Codeforces Round #366 (Div. 2)
    2016 Multi-University Training Contests
    DP套DP HDOJ 4899 Hero meet devil(国王的子民的DNA)
  • 原文地址:https://www.cnblogs.com/xieyang07/p/10493440.html
Copyright © 2020-2023  润新知