From cb55f51413380ffbab1a11f63704d04e854b6d82 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 23 Oct 2019 12:32:47 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20FreeSql.DbContext=20?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E6=96=B9=E6=B3=95=EF=BC=8C=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E4=BD=BF=E7=94=A8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ValuesController.cs | 37 ++++++++++--------- .../dbcontext_01/DbContexts/SongContext.cs | 9 +++-- FreeSql.DbContext/DbContext/DbContext.cs | 16 +++++--- .../Extensions/DependencyInjection.cs | 12 +++++- 4 files changed, 47 insertions(+), 27 deletions(-) diff --git a/Examples/dbcontext_01/Controllers/ValuesController.cs b/Examples/dbcontext_01/Controllers/ValuesController.cs index 3cbb6af6..0df8ab90 100644 --- a/Examples/dbcontext_01/Controllers/ValuesController.cs +++ b/Examples/dbcontext_01/Controllers/ValuesController.cs @@ -191,33 +191,34 @@ namespace dbcontext_01.Controllers - //using (var ctx = new SongContext()) { + using (ctx = new SongContext()) + { - // var song = new Song { }; - // await ctx.Songs.AddAsync(song); - // id = song.Id; + song = new Song { }; + await ctx.Songs.AddAsync(song); + id = song.Id; - // var adds = Enumerable.Range(0, 100) - // .Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" }) - // .ToList(); - // await ctx.Songs.AddRangeAsync(adds); + adds = Enumerable.Range(0, 100) + .Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" }) + .ToList(); + await ctx.Songs.AddRangeAsync(adds); - // for (var a = 0; a < adds.Count; a++) - // adds[a].Title = "dkdkdkdk" + a; + for (var a = 0; a < adds.Count; a++) + adds[a].Title = "dkdkdkdk" + a; - // ctx.Songs.UpdateRange(adds); + ctx.Songs.UpdateRange(adds); - // ctx.Songs.RemoveRange(adds.Skip(10).Take(20).ToList()); + ctx.Songs.RemoveRange(adds.Skip(10).Take(20).ToList()); - // //ctx.Songs.Update(adds.First()); + //ctx.Songs.Update(adds.First()); - // adds.Last().Url = "skldfjlksdjglkjjcccc"; - // ctx.Songs.Update(adds.Last()); + adds.Last().Url = "skldfjlksdjglkjjcccc"; + ctx.Songs.Update(adds.Last()); - // //throw new Exception("回滚"); + //throw new Exception("回滚"); - // await ctx.SaveChangesAsync(); - //} + await ctx.SaveChangesAsync(); + } } catch { diff --git a/Examples/dbcontext_01/DbContexts/SongContext.cs b/Examples/dbcontext_01/DbContexts/SongContext.cs index 2e0ddde9..da7da534 100644 --- a/Examples/dbcontext_01/DbContexts/SongContext.cs +++ b/Examples/dbcontext_01/DbContexts/SongContext.cs @@ -8,13 +8,16 @@ namespace dbcontext_01 public class SongContext : DbContext { + public SongContext() : base() { } + public SongContext(IFreeSql fsql) : base(fsql, null) { } public DbSet Songs { get; set; } public DbSet Tags { get; set; } - //protected override void OnConfiguring(DbContextOptionsBuilder builder) { - // builder.UseFreeSql(dbcontext_01.Startup.Fsql); - //} + protected override void OnConfiguring(DbContextOptionsBuilder builder) + { + builder.UseFreeSql(Startup.Fsql); + } } diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index c9d86010..ba543262 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -54,13 +54,19 @@ namespace FreeSql } #endregion - protected DbContext() + protected DbContext() : this(null, null) { } + protected DbContext(IFreeSql fsql, DbContextOptions options) { - var builder = new DbContextOptionsBuilder(); - OnConfiguring(builder); - _ormPriv = builder._fsql; - _optionsPriv = builder._options; + _ormPriv = fsql; + _optionsPriv = options; + if (_ormPriv == null) + { + var builder = new DbContextOptionsBuilder(); + OnConfiguring(builder); + _ormPriv = builder._fsql; + _optionsPriv = builder._options; + } if (_ormPriv != null) InitPropSets(); } protected virtual void OnConfiguring(DbContextOptionsBuilder builder) { } diff --git a/FreeSql.DbContext/Extensions/DependencyInjection.cs b/FreeSql.DbContext/Extensions/DependencyInjection.cs index 54ba7447..ebd575e1 100644 --- a/FreeSql.DbContext/Extensions/DependencyInjection.cs +++ b/FreeSql.DbContext/Extensions/DependencyInjection.cs @@ -12,7 +12,17 @@ namespace FreeSql { services.AddScoped(dbContextType, sp => { - var ctx = Activator.CreateInstance(dbContextType) as DbContext; + DbContext ctx = null; + try + { + var ctor = dbContextType.GetConstructors().FirstOrDefault(); + var ctorParams = ctor.GetParameters().Select(a => sp.GetService(a.ParameterType)).ToArray(); + ctx = Activator.CreateInstance(dbContextType, ctorParams) as DbContext; + } + catch(Exception ex) + { + throw new Exception($"AddFreeDbContext 发生错误,请检查 {dbContextType.Name} 的构造参数都已正确注入", ex); + } if (ctx != null && ctx._ormPriv == null) { var builder = new DbContextOptionsBuilder();