最近花时间弄了一个关于fireasy使用的demo,已放到 github 上供大家研究,https://github.com/faib920/zero

该 demo 演示了如何使用 fireasy 创建一个后台的管理系统。解决方案包含 asp.net mvc5 和 asp.net core 两个示例,使用 SQLite 数据库,基于 easyui 1.4.3 构建。

用户名: admin 密码: admin

特点

  • 数据库操作与 entity framework 的用法较相似,也是使用 linq ,降低了学习成本,然而与后者所不同的是,提供了 Insert、Update、Delete、Batch 等方法更快捷地进行操作,更贴近于 sql 原生语言。
  • 基于 easyui 构建的后台管理系统,view 层采用 ajax 进行数据交互,因此在 action 接收参数时,直接通过 json 反序列化的方式进行 model bind,这样的好处是,对于复杂的提交的数据结构,比如多个 list,嵌套的对象等,都很容易在 action 里接收。
  • action 接收的实体对象能够主动区分哪些属性被修改,这得益于 LightEntityJsonConverter 转换器,这样,新增或修改时,不必考虑原有数据被覆盖的可能。
  • 没有创建 ViewModel,而直接使用 DataModel,这样节省了很多开发时间,然而这样带来的一个问题,可能也是使用 entity framework 一样面临的问题,那就是 <b>延迟加载</b> 属性会被一概序列化。因此 json 序列化也被优化过,采用 fireasy json serializer 能够主动识别延迟加载对象。
  • 没有 ViewModel,但是可以扩展更多的属性给前端使用,在实体类_Ex 中,可以定义非 virtual 的属性,然后用 ExtendAs 扩展方法,这样避免了 new { } 这样繁琐的赋值操作。
  • services 是基于 AOP 的实例,提供了事务处理、缓存处理等拦截器,只需要标识特性就可以实现这些功能。这也必须使用 fireasy 的 IOC 容器。

项目结构

  • Fireasy.Zero.Models  实体模型
  • Fireasy.Zero.Infrastructure  基础设施
  • Fireasy.Zero.Helpers  相关辅助
  • Fireasy.Zero.Services  数据服务
  • Fireasy.Zero.AspNet  Mvc5示例
  • Fireasy.Zero.AspNetCore  Core示例

Mvc5 配置

有关 fireasy 的配置请参考 web.config 里的 fireasy 小节,其中:

dataInstances 为数据库实例配置,当前使用 sqlite 数据库

containers 为IOC容器配置

mvc/bundles 配置bundle资源文件

注意 global 里对 fireasy 的配置,这些都是必要的

BundleManager.Config();

//MVC控制器工厂添加IOC容器
var container = ContainerUnity.GetContainer();
ControllerBuilder.Current.SetControllerFactory(new ControllerFactory(container));

//easyui验证绑定
SettingsBindManager.RegisterBinder("validatebox", new ValidateBoxSettingBinder());
SettingsBindManager.RegisterBinder("numberbox", new NumberBoxSettingBinder());

//使用 LightEntity 反序列化转换器
GlobalSetting.Converters.Add(new LightEntityJsonConverter());

//从 Container 里反转类型反序列化
GlobalSetting.Converters.Add(new ContainerJsonConverter(container));

core 配置

以上面示例相似,core 的配置在 appsettings.json 里,也是对数据库实例,IOC容器进行配置。

Startup 类文件里的配置

public void ConfigureServices(IServiceCollection services)
{
services.AddFireasy(Configuration)
    .AddIoc(ContainerUnity.GetContainer()); //添加IOC容器

services.AddMvc()
    .ConfigureFireasyMvc(options =>
    {
        options.Converters.Add(new LightEntityJsonConverter()); //action接收的实体对象,是经过 fireasy 底层处理过的
    })
    .ConfigureEasyUI();
}

  

基于 fireasy 构建的 asp.net core 示例的更多相关文章

  1. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  2. .NET跨平台之旅:升级ASP.NET Core示例站点

    ASP.NET Core示例站点网址:http://about.cnblogs.com/ 首先安装最新版的 .NET Core 运行环境,从 https://github.com/dotnet/cli ...

  3. 尝试在mac上用dotnet cli运行asp.net core示例程序

    自从知道微软用dotnet cli取代dnx之后,一直在等dotnet cli支持asp.net core... 昨天看到这篇新闻(ASP.NET Core 1.0 Hello World)后,才知道 ...

  4. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  5. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  6. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些 ...

  7. 如何一秒钟从头构建一个 ASP.NET Core 中间件

    前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...

  8. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  9. 在Windows系统中构建还原ASP.NET Core 源码

    大家好,这几天试着从Github上拉取AspNetCore的源码,尝试着通过Visual Studio 打开,但是并不尽人意.我们需要去构建我们拉去的源代码,这样才可以通过VisualStudio可还 ...

随机推荐

  1. Geode集群搭建

    Geode集群搭建 1.下载安装包 http://mirror.bit.edu.cn/apache/geode/1.2.0/ 2.安装解压后即可直接使用 apache-geode-1.2.0 3.进入 ...

  2. 2018年第一篇行动笔记:Reading Log

    今天读了盖兆泉的文章<美国教师怎么上阅读课>,觉得干货颇多,不仅仅针对儿童英语阅读,而且对生活的方方面面都有助益. 该文章主要内容摘要如下: 学生需要大量时间阅读 这里的阅读时间是特指花在 ...

  3. jquery隐藏域赋值

    <input type="hidden" id="id" value="value"> $("#id的值") ...

  4. thinkinginjava学习笔记01_导论

    初学java,希望旅途愉快  :) 类型决定对象的接口,(有人认为类是类型的特定实现),接口确定对象所能发出的请求(消息),满足请求的代码和隐藏的数据一起构成实现: 对象设计时,应该很好地完成一项任务 ...

  5. dubbo源码—service export

    在应用编写好服务并进行之后,dubbo负责将服务export出去,dubbo export服务的时候主要做了以下几件事: 将服务export到本地(根据scope的配置) 创建Invoker(启动本地 ...

  6. Neo4j学习笔记(2)——数据索引

    和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...

  7. linux 卸载安装node npm

    1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...

  8. 多个tab选项卡

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

  9. 激活IDEA

    1 先跳过提示 2 点击regist 3 输入注册码  : 我的注册码在这里找的 - >>  http://hw1287789687.iteye.com/blog/2153894

  10. xss框架基础框架实现

    0x00web服务器设计 (1)tornado处理请求和Application类要编写一个Tornado应用中最多的工作是定义类继承Tornado的RequestHandler类,主要用于将特定的ur ...