zoukankan      html  css  js  c++  java
  • .net core 2.2 EF oracle db first

    Nuget控制台:

    Install-Package log4net
    Install-Package Newtonsoft.Json
    Install-Package Autofac
    Install-Package Autofac.Extensions.DependencyInjection
    Install-Package AutoMapper
    Install-Package Dapper
    Install-Package Microsoft.Extensions.Options
    Install-Package Microsoft.Extensions.Caching.Abstractions
    Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
    
    Install-Package Oracle.EntityFrameworkCore
    Install-Package Oracle.ManagedDataAccess.Core
    
    Install-Package Microsoft.EntityFrameworkCore
    Install-Package Microsoft.EntityFrameworkCore.Relational
    Install-Package Microsoft.EntityFrameworkCore.Design
    Install-Package Microsoft.EntityFrameworkCore.Tools
    
    
    Scaffold-DbContext -Force "Data Source=" Oracle.EntityFrameworkCore-OutputDir Models/DataModels -Context MyDbContext -Schemas aaa -Tables bbb 
    

      

     

    Scaffold命令格式:

    Scaffold-DbContext [-Connection] <String> [-Provider] <String>
    [-OutputDir <String>] [-Context <String>] [-Schemas <String>]
    [-Tables <String>] [-DataAnnotations] [ -Force] [-Project <String>]
    [-StartupProject <String>] [-Environment <String>] [<CommonParameters>]

    Startup.cs

     public class Startup
        {
            //log4net日志
            public static ILoggerRepository LogRepository { get; set; }
            public IConfiguration Configuration { get; }
    
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
    
                Init();
            }
            public void Init()
            {
                // 加载log4net日志配置文件
                LogRepository = LogManager.CreateRepository("NETCoreRepository");
                XmlConfigurator.Configure(LogRepository, new FileInfo("log4net.config"));
                LogHelper.RepositoryName = LogRepository.Name;
    
                // appSettings 配置类初始化
                //ConfigHelper.Init(Configuration.GetSection("appSettings"));
    
                // 唯一Id生成器
                //SnowflakeInit.Init(Configuration);      
                
                // 邮件初始化
                //MailInit.Init(Configuration);
    
                // 系统启动日志
                LogHelper.Write("TestApi Start()");
            }
    
            /// <summary>
            /// 此方法由运行时调用。使用此方法向容器添加服务。
            /// This method gets called by the runtime. Use this method to add services to the container.
            /// </summary>
            public IServiceProvider ConfigureServices(IServiceCollection services)
            {           
                //注册Cookie认证服务
                //services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
    
                // 添加MemoryCache
                services.AddMemoryCache();
                // 支持HttpContext
                services.AddHttpContextAccessor();
                services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
                // 实现小写的路由URL
                services.AddRouting(options => options.LowercaseUrls = true);
                // 添加自动映射
                //services.AddAutoMapper();
    
                // 对 JSON 数据使用混合大小写。驼峰式,但是javascript 首字母小写形式. 默认值
                // services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); });
                services.AddMvc().AddJsonOptions(options =>
                {
                    // 忽略循环引用
                    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                    // 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出
                    options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
                    // 格式化json日期           
                    options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss'.'fff" });
                    // long型转string           
                    options.SerializerSettings.Converters.Add(new Utils.LongToStringConverter());
                });
    
                //配置跨域处理,允许所有来源:
                services.AddCors(options =>
                {
                    options.AddPolicy("cors", set =>
                    {
                        set.SetIsOriginAllowed(origin => true). //允许任何来源的主机访问
                        AllowAnyHeader().
                        AllowAnyMethod().
                        AllowCredentials(); //指定处理cookie
                    });
                });
    
                // 添加EF Oracle支持
                services.AddDbContext<MyDbContext>(options => options.UseOracle(Configuration.GetConnectionString("OracleConnectionString")));
                // 如果使用SQL Server 2008数据库,请添加UseRowNumberForPaging的选项
                // 参考资料:https://github.com/aspnet/EntityFrameworkCore/issues/4616
                // options.UseSqlServer(Configuration.GetConnectionString("MyDbContent"),b=>b.UseRowNumberForPaging())
    
                // 添加Dapper
                //services.AddDapper("OracleConnection", options =>
                //{
                //    options.ConnectionString = Configuration.GetConnectionString("OracleConnectionString");
                //    options.DbType = DbStoreType.Oracle;
                //});
              
                // Add service filters.
                //services.AddScoped<MyAuthAttribute>();
                //services.AddSingleton<MyAuthRepository>();
    
                //注入全局异常捕获
                services.AddMvc(options =>
                {
                    options.Filters.Add(typeof(GlobalExceptions)); // By type
                });           
               
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
                // 注册Autofac
                return RegisterAutofac(services);
            }
            private IServiceProvider RegisterAutofac(IServiceCollection services)
            {
                //实例化Autofac容器
                var builder = new ContainerBuilder();
                //将Services中的服务填充到Autofac中
                builder.Populate(services);
                //新模块组件注册    
                builder.RegisterModule<AutofacModule>();
                //创建容器
                var Container = builder.Build();
                //第三方IOC接管 core内置DI容器 
                return new AutofacServiceProvider(Container);
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                    app.UseHsts();
                }
    
                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseCookiePolicy();
                app.UseCors("cors");
                app.UseMvc();
    
                //程序停止调用函数
                //appLifetime.ApplicationStopped.Register(() => { AutofacContainer.Dispose(); });
            }
        }
    

      Program:

     public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args)
            {
                var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
                                            .AddJsonFile("host.json")
                                            .Build();
    
                return WebHost.CreateDefaultBuilder(args)
                    .UseUrls(configuration["urls"])
                    .UseStartup<Startup>();
            }
        }
    

      host.json

    {
      "urls": "http://*:8080;https://*:443"
    }
    

      AutofacModule

     public class AutofacModule : Autofac.Module
        {
            /// <summary>
            /// 重写Autofac管道Load方法,在这里注册注入
            /// </summary>
            /// <param name="builder"></param>
            protected override void Load(ContainerBuilder builder)
            {
                builder.RegisterType<MyDbContext>();
    
                //注册Service中的对象,Service中的类要以Service结尾,否则注册失败
                builder.RegisterAssemblyTypes(GetAssemblyByName("WebTest.BLL")).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerLifetimeScope();
      
                //注册Repository中的对象,Repository中的类要以Repository结尾,否则注册失败
                builder.RegisterAssemblyTypes(GetAssemblyByName("WebTest.DAL")).Where(a => a.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerLifetimeScope();
            }
            /// <summary>
            /// 根据程序集名称获取程序集
            /// </summary>
            /// <param name="AssemblyName">程序集名称</param>
            /// <returns></returns>
            public static System.Reflection.Assembly GetAssemblyByName(string AssemblyName)
            {
                return System.Reflection.Assembly.Load(AssemblyName);
            }
        }
    

     Utils.LongToStringConverter.cs

    public class LongToStringConverter : JsonConverter
        {
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                Newtonsoft.Json.Linq.JToken jt = Newtonsoft.Json.Linq.JValue.ReadFrom(reader);
                return jt.Value<long>();
            }
    
            public override bool CanConvert(Type objectType)
            {
                return typeof(System.Int64).Equals(objectType);
            }
    
            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                serializer.Serialize(writer, value.ToString());
            }
        }
    

      

     

  • 相关阅读:
    判断大小写数字个数,取交集和并集
    软件工程总结
    正则表达式(邮箱)
    今天距离你生日的天数
    字符数量,查回文
    解决一个表单中的两个或者多个按钮提交到不同的页面中问题
    jsp前台输入框不输入值,后台怎么取出整型?
    第十次作业
    CMD命令行
    Kali渗透安卓手机
  • 原文地址:https://www.cnblogs.com/dreign/p/11382445.html
Copyright © 2011-2022 走看看