- 优化 FreeSql.DbContext 构造方法,方便注入使用;

This commit is contained in:
28810 2019-10-23 12:32:47 +08:00
parent aaed0334b8
commit cb55f51413
4 changed files with 47 additions and 27 deletions

View File

@ -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
{

View File

@ -8,13 +8,16 @@ namespace dbcontext_01
public class SongContext : DbContext
{
public SongContext() : base() { }
public SongContext(IFreeSql fsql) : base(fsql, null) { }
public DbSet<Song> Songs { get; set; }
public DbSet<Tag> 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);
}
}

View File

@ -54,13 +54,19 @@ namespace FreeSql
}
#endregion
protected DbContext()
protected DbContext() : this(null, null) { }
protected DbContext(IFreeSql fsql, DbContextOptions 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) { }

View File

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