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. DB2存储过程简单示例

    在这个示例中,我们将在DB2中创建一个名为DEMO1201的存储过程. 该存储过程的输入参数IN_NAME和IN_CREDITCARD,表示用户的姓名和身份证号. 该存储过程的作用是根据身份证号来新建 ...

  2. git rev-parse介绍;获取commit id

    git rev-parse master^{commit} 是什么意思 显示master提交的SHA1值 if you want to make sure that the output actual ...

  3. WordPress获取特色图像的链接地址

    为什么要获取WordPress的特色图像呢? 这主要是因为,我们已经写好了静态模板文件,只有获取WordPress特色图像地址插入进去就可以了,非常方便. 还有就是有的时候,我们需要设置图片的宽度为1 ...

  4. 【谷歌浏览器】修改和添加Cookie

    一.使用谷歌浏览器 1.1.修改ookie 方法一:直接用开发者工具修改: 操作如图:   参考: 检查和删除 Cookie · Chrome 开发者工具中文文档 http://www.css88.c ...

  5. JavaScript、TypeScript、ES6三者之间的联系和区别

    ES6是什么 ECMAScript 6.0(以下简称ES6)是JavaScript语言(现在是遵循ES5标准)的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可以 ...

  6. ASP.NET请求过程-基本过程

    客户端发送请求到达服务器 输入域名->DNS解析->指定IP 服务器(如果网页直接输入IP地址则直接到服务器)->请求到达服务器->HTTP.SYS接受HTTP请求->转 ...

  7. Redis SETNX实现分布式锁

    1.某进程1执行 SETNX lock 以尝试获取锁 2.由于某进程2已获得了锁,所以进程1执行 SETNX lock 返回0,即获取锁失败 3.进程1执行 GET lock 来检测锁是否已超时,如果 ...

  8. BP(back propagation)误差逆传播神经网络

    [学习笔记] BP神经网络是一种按误差反向传播的神经网络,它的基本思想还是梯度下降法,中间隐含层的误差和最后一层的误差存在一定的数学关系,(可以计算出来),就像误差被反向传回来了,所以顾名思义BP.想 ...

  9. cv2.VideoWriter()指定写入视频帧编码格式

    帧速率 fps 和 帧大小,通过VideoCapture类的get()函数得到. 编码参数:cv2.VideoWriter_fourcc('I','4','2','0')---未压缩的YUV颜色编码, ...

  10. glib系列1 编译

    1 安装 meson glib 使用 meson进行构建,需要python3,首先下载meson, meson/meson.py 就是程序本身了,可以直接运行 git clone https://gi ...