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. ubuntu 18.04下greenplum安装笔记(二)安装Greenplum的失败的尝试

    之前对Linux环境进行了搭建,现在开始进行Greenplum的正式安装. 下载 进Greenplum的官网:https://greenplum.org/download/ 可以发现,对于ubuntu ...

  2. OpenLayers 根据坐标动态画多边形

    找了一上午,发现都是鼠标点击画框的,那为什么不标明了是 “鼠标”点击 呢? 想实现的功能是数据库检索坐标集合,然后根据分组提取4点坐标,最后把多个多边形形成图层放在地图上. 最后的实现: <!D ...

  3. Swagger API文档

    Swagger API文档集中化注册管理   接口文档是前后端开发对接时很重要的一个组件.手动编写接口文档既费时,又存在文档不能随代码及时更新的问题,因此产生了像swagger这样的自动生成接口文档的 ...

  4. 点击 显示红色 小案例 vue

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Spring 设计模式之责任链模式

    [应用] 以下是一段代码,Spring MVC 的 diapatcherServlet 的 doDispatch 方法中,获取与请求匹配的处理器(HandlerExecutionChain) getH ...

  6. C++Primer 5th Chap7 Classes

    this关键字: 在成员函数内部可以直接调用函数的对象的成员(类成员的直接访问看做是对this隐式引用,默认this指向非常量) 例如:string isbn() const{return this- ...

  7. 【Manacher】Colorful String

    The value of a string s is equal to the number of different letters which appear in this string. You ...

  8. 【转载】【最短路Floyd+KM 最佳匹配】hdu 2448 Mining Station on the Sea

    Mining Station on the Sea Problem Description The ocean is a treasure house of resources and the dev ...

  9. zcat +文件名.gz | grep "查找内容"

    linux  gz查看 zcat +文件名.gz | grep "查找内容" 解压 rar x xxxx.rar

  10. Python+Appium启动手机APP或者浏览器

    一.设备信息配置 脚本如下: from appium import webdriver class my_app(): def __init__(self): desired_caps = {} # ...