EntityFramework

旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

自作多情 提交于 2020-08-14 08:06:34
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能 第一时间 发现问题。 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行;一方面,AWS对Linux有较多的监控措施,另一方面,假如出现问题,可以设置自动重启等服务。 老旧的WCF服务 目前WCF服务,主要提供windows桌面软件的 数据接口 ,应该有五六年的历史了。我进入公司后,WCF服务的代码,一直由我一个人来维护。存在很多 历史遗留问题 ,也有 不同版本 的共存。 如果java重写的话,其中的业务逻辑代码,难免会出现各种各样的bug,增加开发和测试的工作量。听说,要移植到linux服务上后,第一时间想到的就是 跨平台 的 .net core 。 .net core 经过了四年的发展,到目前的 3.1 LST版本,已经是 非常成熟 的跨平台解决方案了。 之后,我就在网上查找,有没有WCF的.net core 版本,查询到的信息总结如下: Core WCF不打算做WCF到.NET Core的100%兼容的移植; 对于新应用程序,WCF这种SOAP技术不建议使用; 对于老的应用程序,建议将这些保留在.NET Framework上; 如果您真的想将一个旧的应用程序迁移到.NET Core并且想继续使用WCF和WF, 社区的开源项目也是可以的

.NET 程序员的 Playground :LINQPad

☆樱花仙子☆ 提交于 2020-08-14 05:57:57
如果想执行一个简单的 C# 语句并获得运行结果,通常我们需要做几个步骤才能达成: 打开 Visual Studio 并新建一个控制台项目。 在 Program.cs 中编写代码并保存。 点击运行按钮或者 F5 运行程序并查看结果。 通常来说这并不会产生问题。但如果你和笔者一样为 Visual Studio 安装了各种插件,那么 Visual Studio 的启动时间就会变得很长。在新建项目时,我们必须为这些临时的代码指定名称和保存路径,如果保持默认的名字,就很可能在今后忘记建立这些文件的用途。 使用 LINQPad 可以解决上面的问题。LINQPad 的软件包很小只有二十兆左右,启动速度很快。使用时只需输入想要执行的 C# 语句,并按下 F5 即可: 快捷键 F4 可以打开“查询属性”窗口,在这个窗口中,你可以引用所有在运行时需要的东西,包括:dll、配置文件、json和文本文件等,这些引用的文件将会被复制到输出目录。 同时,LINQPad 也支持直接将 NuGet 包引用到查询中: 也可以将查询保存为一个扩展名为 .linq 的文件,以便复用代码。 语言支持 包括“C# 表达式(C# Expression)”在内,LINQPad 一共支持 4 种语言和 10 种查询类型: C# Expression C# Statement(s) C# Program VB Expression

C# 数据操作系列

久未见 提交于 2020-08-14 04:03:15
0. 前言 在之前的几篇内容中,我们了解了如何通过ADO.NET 访问数据库,如何修改、新增数据。如何通过DataSet和DataAdapter获取数据,我们将在这一篇试试自己实现一个简单的ORM框架或者说ORM工具类。 涉及到的知识点: 反射(初级) ADO.NET 已有知识 1. ORM 那么,问题来了,什么是ORM?ORM全称 Object Relational Mapping,翻译过来就是对象关系映射。是一种通过描述对象与数据库之间映射关系的数据,将对象保存到数据库中的技术。 在C#中,曾经Entity Framework光芒万丈,遮盖了其他ORM框架的光辉(甚至如今都是如此)。 后来慢慢涌现除了其他的一些ORM框架,进一步丰富了市场。所以现有比较流行的大概有以下几种: Dapper 一个轻量的ORM框架 Entity Framework/Entity Framework Core 功能完备的框架 Nhibernate Java平台上著名的Hibernate的.net版 等等 嗯,这是我最近找到的创作组还在更新的几个框架,当然还有其他的很多有趣好用的ORM框架。欢迎各位补充哈。 这一篇的主要目的不是介绍这些框架(这是以后的内容),而是通过我们自己实现一个类ORM框架来了解底层核心。 2. 设计 我们先分析一下,如果我们设计一个实体对象与数据库之间转换的工具类应该具有哪些功能

C# 数据操作系列

爷,独闯天下 提交于 2020-08-13 23:01:05
原文: C# 数据操作系列 - 7. EF Core 导航属性配置 在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。这一篇将为大家细细分析一下,如何设置这些映射。 1. 实体之间的关系 从数据表来考虑,两个表之前的关系有一对一,一对多(多对一)和多对多的关系。 其中一对一,指的是表A有一条记录对应着表B最多有一条记录与之对应。反过来也一样,表A也最多有一条记录与表B的某一条记录对应。具体在数据表上表现为,A表和B表各有一个外键指向对方。 一对多和多对一是一个概念,只是参考的方向是相反的。所谓的一对多就是其中多方上有一个属性或者列指向了另一个实体,而那个“一”的那头则没有对应的属性指向多方。 多对多是指两个类的实例各有一个集合属性指向对方,换句话说就是A有0到多个B,B也有0到多个A。这里有一个关于多对多的ER图。 2. 一对一关系 先给出两个示例类,为了方便理解,我只保留了主键和导航属性: public class SingleModel { public int Id { get; set ; } public SingleTargetModel SingleTarget { get; set ; } } public class

在实体框架中最快的插入方式

て烟熏妆下的殇ゞ 提交于 2020-08-13 07:08:03
问题: I'm looking for the fastest way of inserting into Entity Framework. 我正在寻找插入实体框架的最快方法。 I'm asking this because of the scenario where you have an active TransactionScope and the insertion is huge (4000+). 我之所以这样问,是因为您有一个活动的TransactionScope且插入量很大(超过4000个)。 It can potentially last more than 10 minutes (default timeout of transactions), and this will lead to an incomplete transaction. 它可能会持续10分钟以上(事务默认超时),这将导致事务不完整。 解决方案: 参考一: https://stackoom.com/question/OvK5/在实体框架中最快的插入方式 参考二: https://oldbug.net/q/OvK5/Fastest-Way-of-Inserting-in-Entity-Framework 来源: oschina 链接: https://my.oschina.net/u

结合 AOP 轻松处理事件发布处理日志

隐身守侯 提交于 2020-08-12 07:43:06
结合 AOP 轻松处理事件发布处理日志 Intro 前段时间,实现了 EventBus 以及 EventQueue 基于 Event 的事件处理,但是没有做日志(EventLog)相关的部分,原本想增加两个接口, 处理事件发布日志和事件处理日志,最近用了 AOP 的思想处理了 EntityFramework 的数据变更自动审计,于是想着事件日志也用 AOP 的思想来实现,而且可能用 AOP 来处理可能会更好一些,最近自己造了一个 AOP 的轮子 —— FluentAspects,下面的示例就以它来演示了,你也可以换成自己喜欢的 AOP 组件,思想是类似的 事件日志示例 事件发布日志 事件发布日志只需要拦截事件发布的方法调用即可,在发布事件时进行拦截,在拦截器中根据需要进行日志记录即可 事件发布者接口定义: public interface IEventPublisher { /// <summary> /// publish an event /// </summary> /// <typeparam name="TEvent">event type</typeparam> /// <param name="event">event data</param> /// <returns>whether the operation succeed</returns> bool

ABP 配置全局数据过滤器 II

房东的猫 提交于 2020-08-12 05:20:28
第一篇 那种写法有些复杂, 简单办法是直接注入 切换到 ***.EntityFramework 项目 在Uow 里面创建 ***EfUnitOfWork.cs 类 public class CooperativeEfUnitOfWork : EfUnitOfWork { public CooperativeEfUnitOfWork(IIocResolver iocResolver, IConnectionStringResolver connectionStringResolver, IDbContextResolver dbContextResolver, IEfUnitOfWorkFilterExecuter filterExecuter, IUnitOfWorkDefaultOptions defaultOptions, IDbContextTypeMatcher dbContextTypeMatcher, IEfTransactionStrategy transactionStrategy) : base(iocResolver, connectionStringResolver, dbContextResolver, filterExecuter, defaultOptions, dbContextTypeMatcher, transactionStrategy) { }

EntityFramework Core 1.1是如何创建DbContext实例的呢?

99封情书 提交于 2020-08-11 13:47:02
原文: EntityFramework Core 1.1是如何创建DbContext实例的呢? 前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起。 显式创建DbContext实例 通过带OnConfiguring的构造函数 这个想必是我们最简单的方式了吧,通过调用继承自DbContext的类并且调用它的无参构造函数,同时我们需要谨记的时每当实例化时我们都需要将其释放也就是将其实例包裹在Using中。如下: using ( var context = new EFCoreContext()) { } 接着通过重载OnConfiguring来配置EF Core上下文实例,如下。 public class EFCoreContext: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer( @" Server=.;Database=EFTest;Trusted_Connection=True; " ); } 【注意】: 重载OnConfiguring和之前EF版本中的OnModelCreating创建模型不一样

C# 数据操作系列

杀马特。学长 韩版系。学妹 提交于 2020-08-11 12:21:45
0.前言 上一章简单介绍了一下ORM框架,并手写了一个类似ORM的工具类。这一章将介绍一个在C#世界里大名鼎鼎的ORM框架——Entity Framework的Core版。 Entity Framework 非Core版目前已经更新到了6代,这是一款经过检验的ORM框架。在这里简单介绍一下Entity Framework(简称EF,额,别拿这个当关键字搜索,要不然你会被忽悠到一个英语培训机构的)的优点。 C#的设计理念是约定优于配置,意思就是通过一定程度的规范性格式化的写法来避免使用配置文件或者配置代码等。而EF可以说是很好的诠释了这个理念。 EF可以在不使用任何配置的前提下,自动解析类与表之间的映射(具体的映射逻辑与我们手写的ORM工具类一致或相近)。 自动跟踪更改。在直接使用通过EF获取的元素时,EF会自动跟踪哪些字段发生了变化,当手动调用保存的时候,EF就会把数据回传给数据库。 可以延迟加载需要的数据,外键引用属性、查询结果等 丰富的映射关系,支持一对一,一对多,多对多,甚至继承、单表多实例等 可以使用Linq 进行查询 非Core版的可以通过数据库表生成实体类,两种都可以通过实体类生成表 基于 ADO.NET 的数据库连接和可用于连接到 SQL Server、Oracle、MySQL、SQLite、PostgreSQL、DB2 等 当然,还有一个特点:EF是约定优于配置

Entity Framework Core

二次信任 提交于 2020-08-11 12:13:19
原文: Entity Framework Core - CURD 【EF框架】DbContext的使用: https://blog.csdn.net/zmh458/article/details/78935172 DBComtext使用 DbContext 类是 EntityFramework (简称 EF )中的一个类,可以理解为一个 数据库对象的实例 。在 EF 中,无需手动的拼接 SQL 语句对数据库进行增删改查,而是通过 DbContext 来进行相应操作。 DbContext类 DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动: (1)EntitySet: DbContext包含映射到数据库表的所有实体的实体集(DbSet )。 (2)查询(Querying): DbContext将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。 (3)更改跟踪(Change Tracking):跟踪实体在从数据库查询后发生的更改。 (4)持久数据(Persisting Data):它还根据实体的状态对数据库执行插入,更新和删除操作。 (5)缓存(Caching): DbContext默认进行一级缓存。它存储在上下文类生命周期中已经被检索的实体。 (6)管理关系(Manage Relationship):