基于EF Core的Code First模式的DotNetCore快速开发框架

    基于EF Core的Code First模式的DotNetCore快速开发框架

    • 商品编号:
      #41710703_417
      • 原价:
        免费
      • 会员价:
        免费
    • 版本:
      • V1_netcore
      • V2_framework
    • 数量:
      库存(不限)

    购物车中已存在此商品,请在购物车中操作单击跳转购物车

    • 开发者:一只卖蜂蜜的码农
    • 开发环境:Visual Studio
    • 版本工具管理:GitHub
    • 开源协议:BSD协议
    • 开发语言:C#
    • 源码架构:B/S
    • 编码格式:UTF-8
    • 数据库:SqlServer

    前言

            最近接了几个小单子,因为是小单子,项目规模都比较小,业务相对来说,也比较简单。所以在选择架构的时候,考虑到效率方面的因素,就采取了asp.net+entity framework中的code first模式,从而可以进行快速开发。几个单子做完下来,顺便总结整理一下,近些时候也一直在学习dotnetcore,索性将项目都升级了,于是便有了这一套“基于EF Core的Code First模式的DotNetCore快速开发框架”。至于code first模式的优劣,此文将不再赘述。至于本文的目的,一是为了总结和整理工作这几年所学的一些知识,方便以后能够快速高效地接入项目中。再是分享出来,跟大家一起探讨学习,一起进步。欢迎各路大佬指正和建议^_^

    项目架构

        此项目主要分成两部分:Zxw.Framework.NetCore (核心类库)和NetCore.Sample (示例)两部分。如图所示:

            1113613-20171015191123449-194835257

    Zxw.Framework.NetCore 项目说明:

    • Attributes —— 一些常用的属性
    • CodeGenerator —— 代码生成器,用于生成Repository和Service层的代码
    • CodeTemplate —— Repository和Service层代码模板
    • EfDbContext —— EF上下文
    • Extensions —— 一些常用的扩展方法
    • Filters —— 一些常用的拦截器
    • Helpers —— 一些常用的帮助类
    • IoC —— IoC容器封装类,Autofac
    • IRepositories —— Repository接口类
    • IServices —— Service接口类
    • Middlewares —— 中间件
    • Models —— 实体接口类,IBaseModel<TKey>
    • Options —— 一些常用的配置类
    • Repositories —— Repository层的父类
    • Services —— Service层的父类

    框架使用

    如 NetCore.Sample 所示,按照此项目结构创建好:

    • Zxw.Framework.Website —— 网站
    • Zxw.Framework.Website.Controllers —— 控制器
    • Zxw.Framework.Website.IRepositories —— 仓储接口
    • Zxw.Framework.Website.IServices —— Service接口
    • Zxw.Framework.Website.Models —— 实体
    • Zxw.Framework.Website.Repositories —— 仓储
    • Zxw.Framework.Website.Services —— Services
    • Zxw.Framework.Website.ViewModels —— ViewModels

    安装nuget package:

        Install-Package Zxw.Framework.NetCore -Version 1.0.1

    需要注意以下几点:

    1. 所有实体都需实现IBaseModel<TKey>接口(TKey是主键类型),如果需要在数据库中生成对应的数据表
    2. 如果IRepositories、IServices、Repositories、Services这四个项目没有单独建立,调用代码生成器生成的代码将存在于调用项目的目录下
    3. 利用代码生成器生成的代码文件需要手动添加到项目中

    实体示例:

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Zxw.Framework.NetCore.Models;
    
    namespace Zxw.Framework.Website.Models
    {
        public class TutorClassType:IBaseModel<int>
        {
            [Key]
            [Column("TutorClassTypeId")]
            public int Id { get; set; }
    
            [Required]
            [StringLength(maximumLength:50)]
            public string TutorClassTypeName { get; set; }
            public bool Active { get; set; } = true;
            [StringLength(maximumLength:200)]
            public string Remark { get; set; }
            public int TutorClassCount { get; set; }
        }
    }

    在Startup.cs文件中使用:

    using System;
    using System.Text;
    using log4net;
    using log4net.Repository;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Caching.Distributed;
    using Microsoft.Extensions.Caching.Memory;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Zxw.Framework.NetCore.EfDbContext;
    using Zxw.Framework.NetCore.Filters;
    using Zxw.Framework.NetCore.Helpers;
    using Zxw.Framework.NetCore.IoC;
    using Zxw.Framework.NetCore.Options;
    
    namespace Zxw.Framework.Website
    {
        public class Startup
        {
            public static ILoggerRepository repository { get; set; }
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
                //初始化log4net
                repository = LogManager.CreateRepository("NETCoreRepository");
                Log4NetHelper.SetConfig(repository, "log4net.config");
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                services.AddMvc(option=>
                {
                    option.Filters.Add(new GlobalExceptionFilter());
                });
                services.AddMemoryCache();//启用MemoryCache
                services.AddDistributedRedisCache(option =>
                {
                    option.Configuration = "localhost";//redis连接字符串
                    option.InstanceName = "";//Redis实例名称
                });//启用Redis
                services.Configure<MemoryCacheEntryOptions>(
                        options => options.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)) //设置MemoryCache缓存有效时间为5分钟。
                    .Configure<DistributedCacheEntryOptions>(option =>
                        option.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5));//设置Redis缓存有效时间为5分钟。
                return InitIoC(services);
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseBrowserLink();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }
    
                app.UseStaticFiles();
                
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
            }
            /// <summary>
            /// IoC初始化
            /// </summary>
            /// <param name="services"></param>
            /// <returns></returns>
            private IServiceProvider InitIoC(IServiceCollection services)
            {
                var connectionString = Configuration.GetConnectionString("MsSqlServer");
                var dbContextOption = new DbContextOption
                {
                    ConnectionString = connectionString,
                    ModelAssemblyName = "Zxw.Framework.Website.Models",
                    DbType = DbType.MSSQLSERVER
                };
                var codeGenerateOption = new CodeGenerateOption
                {
                    ModelsNamespace = "Zxw.Framework.Website.Models",
                    IRepositoriesNamespace = "Zxw.Framework.Website.IRepositories",
                    RepositoriesNamespace = "Zxw.Framework.Website.Repositories",
                    IServicsNamespace = "Zxw.Framework.Website.IServices",
                    ServicesNamespace = "Zxw.Framework.Website.Services"
                };
                IoCContainer.Register(Configuration);//注册配置
                IoCContainer.Register(dbContextOption);//注册数据库配置信息
                IoCContainer.Register(codeGenerateOption);//注册代码生成器相关配置信息
                IoCContainer.Register(typeof(DefaultDbContext));//注册EF上下文
                IoCContainer.Register("Zxw.Framework.Website.Repositories", "Zxw.Framework.Website.IRepositories");//注册仓储
                IoCContainer.Register("Zxw.Framework.Website.Services", "Zxw.Framework.Website.IServices");//注册service
                return IoCContainer.Build(services);
            }
        }
    }

    使用代码生成器:

    using System;
    using System.Diagnostics;
    using Microsoft.AspNetCore.Mvc;
    using Zxw.Framework.NetCore.CodeGenerator;
    using Zxw.Framework.NetCore.Helpers;
    using Zxw.Framework.Website.IServices;
    using Zxw.Framework.Website.ViewModels;
    using Zxw.Framework.Website.Models;
    
    namespace Zxw.Framework.Website.Controllers
    {
        public class HomeController : Controller
        {
            private ITutorClassTypeService iTutorClassTypeService;
    
            public HomeController(ITutorClassTypeService tutorClassTypeService)
            {
                if(tutorClassTypeService==null)
                    throw new ArgumentNullException(nameof(tutorClassTypeService));
                iTutorClassTypeService = tutorClassTypeService;
            }
            public IActionResult Index()
            {
                CodeGenerator.Generate();//生成所有实体类对应的Repository和Service层代码文件
                CodeGenerator.GenerateSingle<TutorClassType, int>();//生成单个实体类对应的Repository和Service层代码文件
    
                return View();
            }
    
            public IActionResult About()
            {
                ViewData["Message"] = "Your application description page.";
    
                return View();
            }
    
            public IActionResult Contact()
            {
                ViewData["Message"] = "Your contact page.";
    
                return View();
            }
    
            public IActionResult Error()
            {
                return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    iTutorClassTypeService.Dispose();
                }
                base.Dispose(disposing);
            }
        }
    }

    总结

    写博客真的很费力,希望自己能够坚持下去。

    权利声明:本站所有商品信息、客户评价等信息是初心商城重要的数据资源,未经许可,禁止非法转载使用。 注:本站商品信息均来自初心商城,其真实性、准确性和合法性由初心商城负责。

                    初心源说明:初心商城主要为程序员提供开发基础的代码源以及成熟项目,网站中所有的商品有提供收费版本的, 也有提供免费版本的,按照大家各自不同的需求进行购买。实实在在的让程序员只用专注于自己的业务实现你的小梦想, 如果您对我们的成果表示认同并且觉得对你有所帮助我们愿意接受来自各方面的支持^_^。

                    支持:用手机扫描二维码支付

                    支付宝支持我们 微信支持我们

                    您的支持将被用于:
                    1、持续深入的上传更多更好的源代码
                    2、建立更加完善的技术社区
                    3、完善现在系统出现各种问题
                    4、购买域名和租赁服务器

                    1、交易规则

                    2、发货方式

                    1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接

                    2、手动:在上方保障服务中标有手动发货的商品,拍下后,卖家会收到邮件,也可通过QQ或订单中的电话联系对方。

                    3、退款说明

                    1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等)

                    2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外)

                    3、发货:手动发货源码,在卖家未发货前,已申请退款的

                    4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外)

                    5、其它:如质量方面的硬性常规问题等

                    备注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!

                    4、注意事项

                    1、客户买完之后未确认收货,将不会收到下载地址和下载码,确认收货之后才能收到下载地址和下载码。

                    2、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);

                    3、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);

                    4、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;

                    5、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时出现问题不明确的情况。

                    5、交易声明

                    1、本站作为直卖平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;

                    2、非平台线上交易的商品,出现任何后果均与本站无关;无论卖家以何理由要求线下交易的,请联系管理举报。

                    初心Logo

                    初心商城| 初心系列| 初心博客| 版本历史| 通知公告| 系统反馈

                    © 2016-2019 上海吾永网络科技有限公司 保留所有权利 沪ICP备19028491号
                    违法和不良信息举报电话:186-2950-9347,本网站所列数据,除特殊说明,所有数据均出自我工作室
                    本网站兼容所有主流浏览器,不支持手机自适应

                    返回顶部小火箭