array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 .net EF框架 MySql实现实例 - 爱码网

2.config文件添加如下配置

1.配置entitframework节点(一般安装EF时自动添加)

 

  <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.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>

 


2.配置system.data节点(一般安装MySql.Data.Entity时自动添加)

 

  <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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

 


3.添加连接串节点(以实际情况修改库名、密码等属性)

 

  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=aceadmin;user id=root;password=xxx;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

 

3.添加实体类

添加AccountUser类

 1 using System;
 2 using System.ComponentModel.DataAnnotations;
 3 using System.ComponentModel.DataAnnotations.Schema;
 4 
 5 namespace EFCodeFirst.Entity
 6 {
 7     [Table("user")]
 8     public class AccountUser
 9     {
10         /// <summary>
11         /// 用户ID
12         /// </summary>
13         [Column("ID")]
14         [Key]
15         public int AccountUserId { get; set; }
16 
17         /// <summary>
18         /// 用户名
19         /// </summary>
20         public string Name { get; set; }
21 
22         /// <summary>
23         /// 年龄
24         /// </summary>
25         public Nullable<int> Age { get; set; }
26 
27         /// <summary>
28         /// 性别
29         /// </summary>
30         public Nullable<bool> Sex { get; set; }
31 
32     }
33 }

 

注:特性“Table”指定数据库中与该实体产生映射的表名,默认不添加系统会去数据库中寻找表名为:“类名+s”的表,找不到会报错。

特性“Column”来指定映射表中的列名,如果属性名与列名相同,则不用添加,系统默认属性名与列名一致。

以上方式为Data Annotations模式(数据注解)映射数据库方法。

EF还提供Fluent API配置来映射数据库,下面会讲到。

4.添加Context实体对象

using System.Data.Entity;

namespace EFCodeFirst
{
    public class DContext : DbContext
    {
        /// <summary>
        /// 添加构造函数,name为config文件中数据库连接字符串的name
        /// </summary>
        public DContext() : base("name=MyContext")
        {

        }

        #region 数据集
        public DbSet<AccountUser> AccountUsers { get; set; }

        #endregion  
    }
}

 


定义新的上下文类DContext集成DbContext

这里声明了与数据库映射的对象AccountUser,以后可以直接用属性AccountUsers来进行对数据库的操作

注:一定要添加构造函数并指明config文件中数据库连接字符串的name,否则系统将把数据库默认指定到VS自带的数据库中

5.写一个简单的插入数据代码运行看结果

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var user = new AccountUser()
                {
                    Name = "Test",
                    Sex = true,
                    Age = 29
                };
                using (var context = new DContext())
                {
                    context.AccountUsers.Add(user);
                    context.SaveChanges();
                    var accountUsers = context.AccountUsers.ToList();
                }
                Console.Write("{0}", user.AccountUserId);
            }
            catch (Exception ex)
            {
                Console.Write("{0}", ex);
            }
            Console.ReadLine();
        }
    }

 


至此EF框架连接MySql数据库已经成功

6.使用Fluent API配置EF映射关系

1.添加新类省、市

    public class Provice
    {
        /// <summary>
        /// 省份ID
        /// </summary>
        public int ProviceId { get; set; }

        /// <summary>
        /// 省份名
        /// </summary>
        public string ProviceName { get; set; }

        /// <summary>
        /// 省份下城市
        /// </summary>
        public List<City> Citys { get; set; }
    }

    public class City
    {
        /// <summary>
        /// 城市ID
        /// </summary>
        public int CityId { get; set; }

        /// <summary>
        /// 所属省份ID
        /// </summary>
        public int ProviceId { get; set; }

        /// <summary>
        /// 城市名称
        /// </summary>
        public string CityName { get; set; }

        /// <summary>
        /// 所属城市
        /// </summary>
        public Provice ProviceData { get; set; }
    }

 


2.添加Fluent API配置类,继承自EntityTypeConfiguration对象

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
    public class ProviceConfiguration : EntityTypeConfiguration<Provice>
    {
        public ProviceConfiguration()
        {
            ToTable("provice")                                                  //映射表
                .HasKey(q => q.ProviceId)                                       //指定主键
                .HasMany(q => q.Citys).WithRequired(q => q.ProviceData).HasForeignKey(q => q.ProviceId);        //配置一对多关系
        }
    }
}

 

注:由于这里添加了外键,则必须用WithRequired方法而不能用WithOption方法,否则报错

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
    public class CityConfiguration : EntityTypeConfiguration<City>
    {
        public CityConfiguration()
        {
            ToTable("city")
            .HasKey(q => q.CityId)
            .Property(q => q.ProviceId).IsRequired();
        }
    }
}

 

一对多关系只用在一端配置,provice处配置后不需要在city端再配置

3.将Fluent API配置添加到DContext类中,重写OnModelCreating方法

public class DContext : DbContext
    {
        /// <summary>
        /// 添加构造函数,name为config文件中数据库连接字符串的name
        /// </summary>
        public DContext() : base("name=MyContext")
        {

        }

        #region 数据集
        public DbSet<AccountUser> AccountUsers { get; set; }
        public DbSet<Provice> Provices { get; set; }
        public DbSet<City> Citys { get; set; }
        #endregion

        #region Fluent API配置
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ProviceConfiguration());
            modelBuilder.Configurations.Add(new CityConfiguration());
        }
        #endregion
    }

 


4.main方法中级联添加省、市

        static void Main(string[] args)
        {
            try
            {
                var provice = new Provice
                {
                    ProviceName = "河南省",
                    Citys = new List<City>()
                    {
                        new City() { CityName = "安阳"},
                        new City() { CityName = "郑州"},
                        new City() { CityName = "洛阳"},
                    }
                };
                using (var context = new DContext())
                {
                    context.Provices.Add(provice);
                    context.SaveChanges();
                    var provices = context.Provices.Include("Citys").ToList();
                }
                Console.Write("{0}", provice.ProviceId);
            }
            catch (Exception ex)
            {
                Console.Write("{0}", ex);
            }

            Console.ReadLine();
        }

 


可以看到数据库中同时向省表和市表中添加了相关数据

 

7.EF的Data Annotations与Fluent API是可以同时使用的,但同效果的配置只需要在二者之一中配置就好。

相关文章: