ef db first oracle,.net core 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] [-Provider]

[-OutputDir ] [-Context ] [-Schemas ]

[-Tables ] [-DataAnnotations] [ -Force] [-Project ]

[-StartupProject ] [-Environment ] []

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()");

}

///

/// 此方法由运行时调用。使用此方法向容器添加服务。

/// This method gets called by the runtime. Use this method to add services to the container.

///

public IServiceProvider ConfigureServices(IServiceCollection services)

{

//注册Cookie认证服务

//services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();

// 添加MemoryCache

services.AddMemoryCache();

// 支持HttpContext

services.AddHttpContextAccessor();

services.AddSingleton();

// 实现小写的路由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(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();

//services.AddSingleton();

//注入全局异常捕获

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();

//创建容器

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();

}

}

host.json

{

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

}

AutofacModule

public class AutofacModule : Autofac.Module

{

///

/// 重写Autofac管道Load方法,在这里注册注入

///

///

protected override void Load(ContainerBuilder builder)

{

builder.RegisterType();

//注册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();

}

///

/// 根据程序集名称获取程序集

///

/// 程序集名称

///

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();

}

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());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值