あまみや ゆうこ » PAGE2

EF Core 插件 —— ToSql

背景

在使用Entity Framework Core进行开发时,若不使用Logger很难查看到一个查询的SQL语句,同时也有些开发者因为不了解EF Core哪些Linq可以Translate成SQL,哪些不能而踩坑导致全表查询的,因此开发了Pomelo.EntityFrameworkCore.Extensions.ToSql。开发者们可以使用这个插件来做查询的单元测试,来检测生成SQL是否正确,或Assert Unevaluated是否为0,同样也可用作对EF Core进行查询语句的输出等。

该项目在GitHub中开源,也欢迎广大开发者加入QQ群522943763提出意见与建议。

使用

首先,在项目中引入Pomelo.EntityFrameworkCore.Extensions.ToSql 2.0.0-preview3-10000

file

在欲输出SQL语句的类中引用命名空间Microsoft.EntityFrameworkCore,并在欲输出SQL语句位置添加.ToSql()

var MySqlContext = new MySqlContext();

更多内容 »

Published on 8/1/2017 2:59:55 PM

全文索引/空间索引 - Pomelo.EFCore.MySql

背景

  • 全文索引(FULL TEXT):MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。
  • 空间索引(SPATIAL):空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息。
  • Pomelo.EntityFrameworkCore.MySql:一款第三方MySQL的Entity Framework Core驱动,在GitHub中开源,性能、功能、下载量均超过Oracle官方提供的版本。QQ群522943763。

使用

全文索引在7月28日被支持,需要安装 Pomelo.EntityFrameworkCore.MySql 2.0.0-preview3-10053 或更高版本。

创建TestModel

class TestModel
{
        public Guid Id { get; set; }

更多内容 »

Published on 7/27/2017 4:03:10 PM

编辑资源菜单 - Azure Portal SDK

在进行Azure Portal Extension开发过程中,避免不了对资源菜单的扩展,于是菜单内容在./Client/Browser/ViewModels/AssetTypeViewModel.ts中。

getMenuConfig方法中添加一个菜单:

        var yukoItem: MsPortalFx.Assets.MenuItem = {
            id: "yuko",
            displayText: "Yuko Amamiya",
            icon: ClientIcons.Icons.cloudService,
            supplyBladeReference: () => {
                return ... // 稍后将使其跳转到一个新的blade上
            }
        };

找到menuConfig,向指定段中添加上述创建的yukoItem

更多内容 »

Published on 4/5/2017 3:05:41 AM

Pomelium——.NET Core下轻量级RPC框架

Background

最近在和朋友开发一款基于Unity 3D的游戏,技术栈选择了.NET Core写服务端、Unity3D写客户端,通过某种手段,已经实现了Unity对C# 6.0的支持,因此可以在Unity里愉快的使用异步函数等功能了。那么现在就要确定通讯协议了,首先虽然Unity对C# 6.0支持了,但是并不代表对netfx有完整的支持,因此无法使用SignalR,TCP协议又显得太过苍白,WCF又太heavy,所以决定造一发轮子。

Pomelium

Pomelium基于TCP协议开发,包内容为前4字节表示正文长度,正文则是一个json字符串。通过简单的协议进行服务端 call 客户端及客户端 call 服务端的操作。

此外,Pomelium还提供了类似WEB开发中的Session功能、Group机制等,开发者可以使用Pomelium进行更加灵活的开发。

Pomelium支持通过Microsoft.Extensions.Cache.Distributed.IDistrbutedCache来Scale out,构建分布式Pomelium服务器集群。支持开发者进行跨服务器的客户端方法调用等。

Getting Started

① 首先向服务端项目中添加Pomelo.Net.Pomelium.Server的引用。

更多内容 »

Published on 1/31/2017 6:20:14 AM

异步广度优先搜索算法

为什么要异步?

CPU的工艺越来越小,Cannon Lake架构的Intel CPU已经达到10nm技术,因此在面积不变的情况下,核心数可以明显提升。单纯的提升主频将造成发热量大、需要的电压大、功耗大的问题。而传统的算法与数据结构是针对单核心单线程同步而言的,因此,传统的算法无法将CPU利用率达到最大。

广度优先搜索

首先我们先了解一下与之对应的深度优先搜索(DFS),深度优先搜索即像走迷宫时,始终保持左手与左侧墙壁接触,换言之即遇到岔路时永远向左拐,从而寻找出口。而广度优先搜索,则在每个岔路时,变出一个分身,继续前进。

但是,实际上是这样吗?答案是否定的,刚刚已经讲到,传统的算法与数据结构是建立在单线程同步基础上的,因此传统算法只能够模拟分身在同时前进,这时就要引入队列来保存和展开岔路节点(当遇到新岔路时,将这个节点放入队列。队列头部元素进行展开寻找新的岔路并放入队列尾部)。

基于Parallel的并行广度优先搜索

而在并行或异步以及多线程的环境下,我们可以真的让“分身”们同时前进。首先使用并行广度优先搜索的前提是你不在意真的保证了广度是同步的,虽然并行广度优先搜索能够寻找到全部解,但是无法保证同一时刻进行搜索的任务是在同一深度的。

在这一前提下,我们以遍历图为例,首先定义邻接表的数据结构:

更多内容 »

Published on 1/15/2017 9:21:44 AM