mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 优化 FreeSql.DbContext 构造方法,方便注入使用;
This commit is contained in:
parent
aaed0334b8
commit
cb55f51413
@ -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
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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) { }
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user