1  运行环境   vs2017   Net FromWork 4.6.2  手动版 没有 ado.net 实体数据模型

2 NuGet  MySql.Data.Entity 6.10.9, MySql.Data 6.10.9,EntityFramework 6.2.0,Json.Net 1.0.16

3  源代码 https://github.com/chxl800/EFMysqlDemo

1 项目创建流程视图

2 App.config 配置 需要手动添加标红了 注意 MySql Data版本号

<?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> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider></providers>
</entityFramework> <connectionStrings>
<add name="DBEntities" connectionString="server=localhost;port=3306;uid=root;pwd=root;database=demodb;" 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.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
</configuration>

3 DBEntities.cs 数据库上下文

using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.ModelConfiguration.Conventions;
using EFMysqlFrameWork.Model; namespace EFMysqlFrameWork
{
public class DBEntities : DbContext
{
public DBEntities()
: base("name=DBEntities")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//解决EF动态建库数据库表名变为复数问题
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
} public DbSet<User> User { get; set; }
}
}

4 DBContextFactory.cs 增加工厂模式

using System.Data.Entity;
using System.Runtime.Remoting.Messaging; namespace EFMysqlFrameWork
{
public class DBContextFactory
{
/// <summary>
/// 帮我们返回当前线程内的数据库上下文,如果当前线程内没有上下文,那么创建一个上下文,并保证
/// 上线问实例在线程内部是唯一的
/// </summary>
/// <returns></returns>
public static DbContext GetDbContext()
{
DbContext dbContext = CallContext.GetData(typeof(DBContextFactory).Name) as DbContext;
if (dbContext == null)
{
dbContext = new DBEntities();
CallContext.SetData(typeof(DBContextFactory).Name, dbContext);
}
return dbContext;
}
}
}

5 BaseDAL.cs   操作数据库CRUD  基类

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions; namespace EFMysqlFrameWork
{
public class BaseDAL<TEntity> where TEntity : class
{
//1.0 实例化EF上下文
DbContext db = DBContextFactory.GetDbContext(); //2.0 定义DbSet<T> 对象
public DbSet<TEntity> _dbset; //3.0 在构造函数的初始化_dbset
public BaseDAL()
{
_dbset = db.Set<TEntity>();
} #region 1.0 增
public virtual void Add(TEntity model)
{
//1.0 参数合法性验证
if (model == null)
{
throw new Exception("BaseRepository泛型类中,新增操作的实体不能为空");
} //2.0 进行新增操作
_dbset.Add(model);
}
#endregion #region 2.0 删
public virtual void Delete(TEntity model)
{
//1.0 参数合法性验证
if (model == null)
{
throw new Exception("BaseRepository泛型类中,删除操作的实体不能为空");
}
_dbset.Attach(model);
_dbset.Remove(model);
}
#endregion #region 3.0 改
/// <summary>
/// 编辑,约定model 是一个自定义的实体,没有追加到EF容器中的
/// </summary>
/// <param name="model"></param>
public virtual void Edit(TEntity model, string[] propertyNames)
{
//0.0 关闭EF的实体属性合法性检查
db.Configuration.ValidateOnSaveEnabled = false; //1.0 参数合法性验证
if (model == null)
{
throw new Exception("BaseRepository泛型类中,编辑操作的实体不能为空");
} if (propertyNames == null || propertyNames.Length == )
{
throw new Exception("BaseRepository泛型类中,编辑操作的属性数组必须至少有一个值");
} //2.0 将model追加到EF容器中的
DbEntityEntry entry = db.Entry(model);
entry.State = EntityState.Unchanged; foreach (var item in propertyNames)
{
entry.Property(item).IsModified = true;
}
}
#endregion #region 4.0 查
/// <summary>
/// 带条件查询
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public virtual List<TEntity> QueryWhere(Expression<Func<TEntity, bool>> where)
{
return _dbset.Where(where).ToList();
}
#endregion #region 5.0 统一保存
/// <summary>
/// 统一将EF容器对象中的所有代理类生成相应的sql语句发给db服务器执行
/// </summary>
/// <returns></returns>
public virtual int SaveChanges()
{
try
{
return db.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion }
}

6 Program.cs 测试类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EFMysqlFrameWork.Common;
using EFMysqlFrameWork.Model;
using Json.Net; namespace EFMysqlFrameWork
{
class Program
{
static void Main(string[] args)
{
BaseDAL<User> dal = new BaseDAL<User>(); User user = new User();
user.Id = Guid.NewGuid().ToString().Replace("-","");
dal.Add(user);
dal.SaveChanges(); List<User> list = dal.QueryWhere(s => true); //json转化
var userJson = JsonNet.Serialize(list, JsonHelper.dateConverter);
//var userList = JsonNet.Deserialize<List<User>>(userJson, JsonHelper.dateConverter); Console.WriteLine(userJson);
Console.Read();
}
} }

7 运行结果

8 User.cs

using System;

namespace EFMysqlFrameWork.Model
{
/// <summary>
/// 账号表
/// </summary>
public class User
{
/// <summary>
///
/// </summary>
public string Id { get; set; }
/// <summary>
///
/// </summary>
public string TenantId { get; set; }
/// <summary>
///
/// </summary>
public string UserName { get; set; }
/// <summary>
///
/// </summary>
public string RealName { get; set; }
/// <summary>
///
/// </summary>
public string UserCode { get; set; }
/// <summary>
///
/// </summary>
public string Password { get; set; }
/// <summary>
///
/// </summary>
public string Salt { get; set; }
/// <summary>
///
/// </summary>
public string Mobile { get; set; }
/// <summary>
///
/// </summary>
public string Email { get; set; }
/// <summary>
///
/// </summary>
public int UserType { get; set; }
/// <summary>
///
/// </summary>
public int Status { get; set; }
/// <summary>
///
/// </summary>
public string Creator { get; set; }
/// <summary>
///
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
///
/// </summary>
public string Reviser { get; set; }
/// <summary>
///
/// </summary>
public DateTime ReviseTime { get; set; }
/// <summary>
///
/// </summary>
public DateTime? LoginTime { get; set; }
/// <summary>
///
/// </summary>
public string IP { get; set; }
/// <summary>
///
/// </summary>
public DateTime? LastLoginTime { get; set; }
/// <summary>
///
/// </summary>
public string LastIP { get; set; }
}
}

9 JsonHelper.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using Json.Net; namespace EFMysqlFrameWork.Common
{
public static partial class JsonHelper
{
public static JsonConverter<DateTime> dateConverter = new JsonConverter<DateTime>(
dt => dt.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture),
s => DateTime.ParseExact(s, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); }
}

Vs2017 FrameWork EF Mysql 控制台应用的更多相关文章

  1. Vs2017 FrameWork EF Mysql Mvc 三层整合1

    1  运行环境   vs2017   Net FromWork 4.6.2  手动版 没有 ado.net 实体数据模型 2 NuGet  MySql.Data.Entity 6.10.9, MySq ...

  2. Vs2017 NetCode EF Mysql 控制台应用

    1  运行环境   vs2017   NetCode2.0 2 NuGet  MySql.Data.EntityFrameworkCore 8.0.18   Json.Net 1.0.16 3  源代 ...

  3. VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 版本对应才行

    最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connector-net-6.9.10.msi  和  mysql-for-vi ...

  4. VS2017 + EF + MySQL 我使用过程中遇到的坑

    原文:VS2017 + EF + MySQL 我使用过程中遇到的坑 写在前面: 第一次使用MySQL连接VS的时候本着最新版的应该就是最好的,在MySQL官网下载了最新版的MySQL没有并且安装完成之 ...

  5. VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)

    原文:VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connec ...

  6. Vs2017 NetCode Mvc EF Mysql 整合2

    1 NetCode EF整合 代码 3  源代码 https://github.com/chxl800/EFMysqlDemo 1.1 项目文件结构 1.2 NuGet  MySql.Data.Ent ...

  7. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

  8. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  9. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

随机推荐

  1. UIImagePickerController的用法

    在实际的APP开发中,我们经常会见到应用的这样的功能 :需要选取手机相册的照片,还有选取视频,拍视频和照相的操作. 在iOS开发中,实现以上的功能就需要用到 UIImagePickerControll ...

  2. C入门笔记

    教程总体概括:Mac OS X系统简介:C语言:OC语言:Foundation:iOS开发:项目实战. 3.第一个c语言程序#include <stdio.h>//预处理指令:在编译之前执 ...

  3. 02.提交bug

    写代码最烦的也就是修复bug了,虽然这个避无可避…………………… a. bug的严重级别设置 1级:影响主要流程 ->在bug 的影响下,主流程 测试无法向下进行 2级:影响核心功能 -> ...

  4. 基于Visual Studio Code搭建Vue开发环境

    安装node.js最新版 这里安装的是8.11.4版   image.png 更新npm至最新版 安装node.js后, npm默认版本为: 6.1.0   image.png 使用npm insta ...

  5. FineReport点击输入框直接展示下拉框列表

    引用自帆软官方文档-http://help.finereport.com/doc-view-1899.html 1. 描述 下拉框以及下拉复选框默认状态,必须点击最右侧的三角才可以实现下拉,不够人性化 ...

  6. Npcap.资料

    1.ZC:Npcap 是 WinPcap停更之后的继承者.我尝试了 Win7中发送raw tcp syn,它的代码和 使用WinPcap的基本一致. Developing software with ...

  7. AutoMapper扩展帮助类

    /// <summary> /// AutoMapper扩展帮助类 /// </summary> public static class AutoMapperExtension ...

  8. python安装第三方的包

    转载自:http://blog.csdn.net/xyqzki/article/details/38414433 第一种基本安装方法 1 下载第三方包,解压 2 在命令提示符里输入cmd,然后用cd进 ...

  9. python 字符串 - python基础入门(12)

    在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称:str. 在本文会大量的使用print ...

  10. poj1873(二进制枚举+求凸包周长)

    题目链接:https://vjudge.net/problem/POJ-1873 题意:n个点(2<=n<=15),给出n个点的坐标(x,y).价值v.做篱笆时的长度l,求选择哪些点来做篱 ...