From 52fbe5ed86c237ab6574c0497d99b34908e4e0da Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Fri, 10 Apr 2020 19:54:43 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DbContext/Repository?=
=?UTF-8?q?=20Orm=20=E5=B1=9E=E6=80=A7=E8=BF=9B=E8=A1=8C=20CURD=20?=
=?UTF-8?q?=E4=B8=8E=E8=87=AA=E8=BA=AB=E4=BA=8B=E5=8A=A1=E7=9B=B8=E5=90=8C?=
=?UTF-8?q?=E3=80=90=E6=96=B0=E7=AA=81=E7=A0=B4=E3=80=91=EF=BC=9B#270?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/DbContext/DbContext.cs | 24 +-
.../DbContext/DbContextScopedFreeSql.cs | 74 +
FreeSql.DbContext/DbContext/FreeContext.cs | 2 +-
FreeSql.DbContext/DbSet/DbSet.cs | 70 +-
FreeSql.DbContext/DbSet/DbSetAsync.cs | 56 +-
FreeSql.DbContext/DbSet/DbSetSync.cs | 60 +-
.../Extensions/DependencyInjection.cs | 6 +-
FreeSql.DbContext/FreeSql.DbContext.xml | 12 -
.../ContextSet/RepositoryDbContext.cs | 4 +-
.../Repository/ContextSet/RepositoryDbSet.cs | 4 +-
.../Repository/Repository/BaseRepository.cs | 13 +-
.../Repository/Repository/IBaseRepository.cs | 5 -
.../RepositoryTests.cs | 11 +
.../FreeSql.Tests.DbContext/UnitTest1.cs | 11 +-
FreeSql/FreeSql.xml | 7377 ++++++++---------
.../Internal/CommonProvider/InsertProvider.cs | 2 +-
.../Internal/CommonProvider/UpdateProvider.cs | 2 +-
17 files changed, 3884 insertions(+), 3849 deletions(-)
create mode 100644 FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs
diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs
index c4ac6da4..49f044f1 100644
--- a/FreeSql.DbContext/DbContext/DbContext.cs
+++ b/FreeSql.DbContext/DbContext/DbContext.cs
@@ -10,13 +10,9 @@ namespace FreeSql
{
public abstract partial class DbContext : IDisposable
{
- internal IFreeSql _ormPriv;
-
- ///
- /// 注意:IFreeSql 属于顶级对象,事务无法自动传递。
- /// 手工传递事务:ISelect/IInsert/IDelete/IUpdate 可以使用 WithTransaction(uow.GetOrBeginTransaction())
- ///
- public IFreeSql Orm => _ormPriv ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
+ internal DbContextScopedFreeSql _ormScoped;
+ internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
+ public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
#region Property UnitOfWork
internal bool _isUseUnitOfWork = true; //是否创建工作单元事务
@@ -28,7 +24,7 @@ namespace FreeSql
{
if (_uowPriv != null) return _uowPriv;
if (_isUseUnitOfWork == false) return null;
- return _uowPriv = new UnitOfWork(Orm);
+ return _uowPriv = new UnitOfWork(OrmOriginal);
}
}
#endregion
@@ -43,7 +39,7 @@ namespace FreeSql
if (_optionsPriv == null)
{
_optionsPriv = new DbContextOptions();
- if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(Orm.Ado.Identifier, out var opt))
+ if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(OrmOriginal.Ado.Identifier, out var opt))
{
_optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList;
_optionsPriv.OnEntityChange = opt.OnEntityChange;
@@ -63,17 +59,17 @@ namespace FreeSql
protected DbContext() : this(null, null) { }
protected DbContext(IFreeSql fsql, DbContextOptions options)
{
- _ormPriv = fsql;
+ _ormScoped = DbContextScopedFreeSql.Create(fsql, () => this, () => UnitOfWork);
_optionsPriv = options;
- if (_ormPriv == null)
+ if (_ormScoped == null)
{
var builder = new DbContextOptionsBuilder();
OnConfiguring(builder);
- _ormPriv = builder._fsql;
+ _ormScoped = DbContextScopedFreeSql.Create(builder._fsql, () => this, () => UnitOfWork);
_optionsPriv = builder._options;
}
- if (_ormPriv != null) InitPropSets();
+ if (_ormScoped != null) InitPropSets();
}
protected virtual void OnConfiguring(DbContextOptionsBuilder builder) { }
@@ -113,7 +109,7 @@ namespace FreeSql
#region DbSet 快速代理
void CheckEntityTypeOrThrow(Type entityType)
{
- if (Orm.CodeFirst.GetTableByEntity(entityType) == null)
+ if (OrmOriginal.CodeFirst.GetTableByEntity(entityType) == null)
throw new ArgumentException($"参数 data 类型错误 {entityType.FullName} ");
}
///
diff --git a/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs
new file mode 100644
index 00000000..b188b937
--- /dev/null
+++ b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs
@@ -0,0 +1,74 @@
+using FreeSql;
+using FreeSql.Internal;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Text;
+
+namespace FreeSql
+{
+ class DbContextScopedFreeSql : IFreeSql
+ {
+ public IFreeSql _originalFsql;
+ Func _resolveDbContext;
+ Func _resolveUnitOfWork;
+ DbContextScopedFreeSql() { }
+
+ public static DbContextScopedFreeSql Create(IFreeSql fsql, Func resolveDbContext, Func resolveUnitOfWork)
+ {
+ if (fsql == null) return null;
+ var scopedfsql = fsql as DbContextScopedFreeSql;
+ if (scopedfsql == null) return new DbContextScopedFreeSql { _originalFsql = fsql, _resolveDbContext = resolveDbContext, _resolveUnitOfWork = resolveUnitOfWork };
+ return Create(scopedfsql._originalFsql, resolveDbContext, resolveUnitOfWork);
+ }
+
+ public IAdo Ado => _originalFsql.Ado;
+ public IAop Aop => _originalFsql.Aop;
+ public ICodeFirst CodeFirst => _originalFsql.CodeFirst;
+ public IDbFirst DbFirst => _originalFsql.DbFirst;
+ public GlobalFilter GlobalFilter => _originalFsql.GlobalFilter;
+ public void Dispose() { }
+
+ public void Transaction(Action handler) => _originalFsql.Transaction(handler);
+ public void Transaction(TimeSpan timeout, Action handler) => _originalFsql.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => _originalFsql.Transaction(isolationLevel, timeout, handler);
+
+ public ISelect Select() where T1 : class
+ {
+ _resolveDbContext()?.ExecCommand();
+ return _originalFsql.Select().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction(false));
+ }
+ public ISelect Select(object dywhere) where T1 : class => Select().WhereDynamic(dywhere);
+
+ public IDelete Delete() where T1 : class
+ {
+ _resolveDbContext()?.ExecCommand();
+ return _originalFsql.Delete().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
+ }
+ public IDelete Delete(object dywhere) where T1 : class => Delete().WhereDynamic(dywhere);
+
+ public IUpdate Update() where T1 : class
+ {
+ var db = _resolveDbContext();
+ db?.ExecCommand();
+ var update = _originalFsql.Update().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
+ if (db?.Options.NoneParameter != null) update.NoneParameter(db.Options.NoneParameter.Value);
+ return update;
+ }
+ public IUpdate Update(object dywhere) where T1 : class => Update().WhereDynamic(dywhere);
+
+ public IInsert Insert() where T1 : class
+ {
+ var db = _resolveDbContext();
+ db?.ExecCommand();
+ var insert = _originalFsql.Insert().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
+ if (db?.Options.NoneParameter != null) insert.NoneParameter(db.Options.NoneParameter.Value);
+ return insert;
+ }
+ public IInsert Insert(T1 source) where T1 : class => Insert().AppendData(source);
+ public IInsert Insert(T1[] source) where T1 : class => Insert().AppendData(source);
+ public IInsert Insert(List source) where T1 : class => Insert().AppendData(source);
+ public IInsert Insert(IEnumerable source) where T1 : class => Insert().AppendData(source);
+
+ }
+}
diff --git a/FreeSql.DbContext/DbContext/FreeContext.cs b/FreeSql.DbContext/DbContext/FreeContext.cs
index 62fbe1c7..ab7a262f 100644
--- a/FreeSql.DbContext/DbContext/FreeContext.cs
+++ b/FreeSql.DbContext/DbContext/FreeContext.cs
@@ -7,7 +7,7 @@ namespace FreeSql
public FreeContext(IFreeSql orm)
{
- _ormPriv = orm;
+ _ormScoped = DbContextScopedFreeSql.Create(orm, () => this, () => UnitOfWork);
}
}
}
diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs
index 9dfe6aa2..32efd9dd 100644
--- a/FreeSql.DbContext/DbSet/DbSet.cs
+++ b/FreeSql.DbContext/DbSet/DbSet.cs
@@ -33,7 +33,7 @@ namespace FreeSql
protected virtual ISelect OrmSelect(object dywhere)
{
DbContextExecCommand(); //查询前先提交,否则会出脏读
- return _db.Orm.Select().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
+ return _db.OrmOriginal.Select().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
}
~DbSet() => this.Dispose();
@@ -54,7 +54,7 @@ namespace FreeSql
protected virtual IInsert OrmInsert()
{
- var insert = _db.Orm.Insert().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction());
+ var insert = _db.OrmOriginal.Insert().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction());
if (_db.Options.NoneParameter != null) insert.NoneParameter(_db.Options.NoneParameter.Value);
return insert;
}
@@ -63,11 +63,11 @@ namespace FreeSql
protected virtual IUpdate OrmUpdate(IEnumerable entitys)
{
- var update = _db.Orm.Update().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction());
+ var update = _db.OrmOriginal.Update().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction());
if (_db.Options.NoneParameter != null) update.NoneParameter(_db.Options.NoneParameter.Value);
return update.SetSource(entitys);
}
- protected virtual IDelete OrmDelete(object dywhere) => _db.Orm.Delete().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
+ protected virtual IDelete OrmDelete(object dywhere) => _db.OrmOriginal.Delete().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) =>
_db.EnqueueAction(changeType, this, typeof(EntityState), _entityType, state);
@@ -89,7 +89,7 @@ namespace FreeSql
var itemType = item.GetType();
if (itemType == typeof(object)) return;
if (itemType.FullName.Contains("FreeSqlLazyEntity__")) itemType = itemType.BaseType;
- if (_db.Orm.CodeFirst.GetTableByEntity(itemType)?.Primarys.Any() != true) return;
+ if (_db.OrmOriginal.CodeFirst.GetTableByEntity(itemType)?.Primarys.Any() != true) return;
var dbset = _db.Set(itemType);
dbset?.GetType().GetMethod("TrackToList", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(dbset, new object[] { list });
return;
@@ -99,11 +99,11 @@ namespace FreeSql
if (_table?.Primarys.Any() != true) return;
foreach (var item in ls)
{
- var key = _db.Orm.GetEntityKeyString(_entityType, item, false);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
if (key == null) continue;
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
{
- _db.Orm.MapEntityValue(_entityType, item, ov.Value);
+ _db.OrmOriginal.MapEntityValue(_entityType, item, ov.Value);
ov.Time = DateTime.Now;
return ov;
});
@@ -117,7 +117,7 @@ namespace FreeSql
protected ConcurrentDictionary _states = new ConcurrentDictionary();
internal ConcurrentDictionary _statesInternal => _states;
TableInfo _tablePriv;
- protected TableInfo _table => _tablePriv ?? (_tablePriv = _db.Orm.CodeFirst.GetTableByEntity(_entityType));
+ protected TableInfo _table => _tablePriv ?? (_tablePriv = _db.OrmOriginal.CodeFirst.GetTableByEntity(_entityType));
ColumnInfo[] _tableIdentitysPriv, _tableServerTimesPriv;
protected ColumnInfo[] _tableIdentitys => _tableIdentitysPriv ?? (_tableIdentitysPriv = _table.Primarys.Where(a => a.Attribute.IsIdentity).ToArray());
protected ColumnInfo[] _tableServerTimes => _tableServerTimesPriv ?? (_tableServerTimesPriv = _table.Primarys.Where(a => a.Attribute.ServerTime != DateTimeKind.Unspecified).ToArray());
@@ -133,7 +133,7 @@ namespace FreeSql
{
if (entityType == typeof(object)) throw new Exception("ISelect.AsType 参数不支持指定为 object");
if (entityType == _entityType) return this;
- var newtb = _db.Orm.CodeFirst.GetTableByEntity(entityType);
+ var newtb = _db.OrmOriginal.CodeFirst.GetTableByEntity(entityType);
_entityType = entityType;
_tablePriv = newtb ?? throw new Exception("DbSet.AsType 参数错误,请传入正确的实体类型");
_tableIdentitysPriv = null;
@@ -179,15 +179,15 @@ namespace FreeSql
public void AttachRange(IEnumerable data)
{
if (data == null || data.Any() == false) return;
- if (_table.Primarys.Any() == false) throw new Exception($"不可附加,实体没有主键:{_db.Orm.GetEntityString(_entityType, data.First())}");
+ if (_table.Primarys.Any() == false) throw new Exception($"不可附加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data.First())}");
foreach (var item in data)
{
- var key = _db.Orm.GetEntityKeyString(_entityType, item, false);
- if (string.IsNullOrEmpty(key)) throw new Exception($"不可附加,未设置主键的值:{_db.Orm.GetEntityString(_entityType, item)}");
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
+ if (string.IsNullOrEmpty(key)) throw new Exception($"不可附加,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, item)}");
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
{
- _db.Orm.MapEntityValue(_entityType, item, ov.Value);
+ _db.OrmOriginal.MapEntityValue(_entityType, item, ov.Value);
ov.Time = DateTime.Now;
return ov;
});
@@ -201,10 +201,10 @@ namespace FreeSql
{
if (data == null) return this;
var pkitem = (TEntity)Activator.CreateInstance(_entityType);
- foreach (var pk in _db.Orm.CodeFirst.GetTableByEntity(_entityType).Primarys)
+ foreach (var pk in _db.OrmOriginal.CodeFirst.GetTableByEntity(_entityType).Primarys)
{
- var colVal = _db.Orm.GetEntityValueWithPropertyName(_entityType, data, pk.CsName);
- _db.Orm.SetEntityValueWithPropertyName(_entityType, pkitem, pk.CsName, colVal);
+ var colVal = _db.OrmOriginal.GetEntityValueWithPropertyName(_entityType, data, pk.CsName);
+ _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, pkitem, pk.CsName, colVal);
}
this.Attach(pkitem);
return this;
@@ -222,15 +222,15 @@ namespace FreeSql
EntityState CreateEntityState(TEntity data)
{
if (data == null) throw new ArgumentNullException(nameof(data));
- var key = _db.Orm.GetEntityKeyString(_entityType, data, false);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
var state = new EntityState((TEntity)Activator.CreateInstance(_entityType), key);
- _db.Orm.MapEntityValue(_entityType, data, state.Value);
+ _db.OrmOriginal.MapEntityValue(_entityType, data, state.Value);
return state;
}
bool? ExistsInStates(TEntity data)
{
if (data == null) throw new ArgumentNullException(nameof(data));
- var key = _db.Orm.GetEntityKeyString(_entityType, data, false);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
if (string.IsNullOrEmpty(key)) return null;
return _states.ContainsKey(key);
}
@@ -255,14 +255,14 @@ namespace FreeSql
}
if (_table.Primarys.Any() == false)
{
- if (isThrow) throw new Exception($"不可添加,实体没有主键:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可添加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
- FreeSql.Internal.CommonProvider.InsertProvider.AuditDataValue(this, data, _db.Orm, _table, null);
- var key = _db.Orm.GetEntityKeyString(_entityType, data, true);
+ FreeSql.Internal.CommonProvider.InsertProvider.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, true);
if (string.IsNullOrEmpty(key))
{
- switch (_db.Orm.Ado.DataType)
+ switch (_db.OrmOriginal.Ado.DataType)
{
case DataType.SqlServer:
case DataType.OdbcSqlServer:
@@ -272,7 +272,7 @@ namespace FreeSql
default:
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
return true;
- if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
}
@@ -280,13 +280,13 @@ namespace FreeSql
{
if (_states.ContainsKey(key))
{
- if (isThrow) throw new Exception($"不可添加,已存在于状态管理:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可添加,已存在于状态管理:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
- var idval = _db.Orm.GetEntityIdentityValueWithPrimary(_entityType, data);
+ var idval = _db.OrmOriginal.GetEntityIdentityValueWithPrimary(_entityType, data);
if (idval > 0)
{
- if (isThrow) throw new Exception($"不可添加,自增属性有值:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可添加,自增属性有值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
}
@@ -313,19 +313,19 @@ namespace FreeSql
}
if (_table.Primarys.Any() == false)
{
- if (isThrow) throw new Exception($"不可更新,实体没有主键:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可更新,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
- FreeSql.Internal.CommonProvider.UpdateProvider.AuditDataValue(this, data, _db.Orm, _table, null);
- var key = _db.Orm.GetEntityKeyString(_entityType, data, false);
+ FreeSql.Internal.CommonProvider.UpdateProvider.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
if (string.IsNullOrEmpty(key))
{
- if (isThrow) throw new Exception($"不可更新,未设置主键的值:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可更新,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
if (_states.TryGetValue(key, out var tryval) == false)
{
- if (isThrow) throw new Exception($"不可更新,数据未被跟踪,应该先查询 或者 Attach:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可更新,数据未被跟踪,应该先查询 或者 Attach:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
return true;
@@ -351,13 +351,13 @@ namespace FreeSql
}
if (_table.Primarys.Any() == false)
{
- if (isThrow) throw new Exception($"不可删除,实体没有主键:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可删除,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
- var key = _db.Orm.GetEntityKeyString(_entityType, data, false);
+ var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
if (string.IsNullOrEmpty(key))
{
- if (isThrow) throw new Exception($"不可删除,未设置主键的值:{_db.Orm.GetEntityString(_entityType, data)}");
+ if (isThrow) throw new Exception($"不可删除,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
return false;
}
//if (_states.TryGetValue(key, out var tryval) == false) {
diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs
index 1dfb5296..1e756f53 100644
--- a/FreeSql.DbContext/DbSet/DbSetAsync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs
@@ -35,7 +35,7 @@ namespace FreeSql
if (_tableIdentitys.Length > 0)
{
//有自增,马上执行
- switch (_db.Orm.Ado.DataType)
+ switch (_db.OrmOriginal.Ado.DataType)
{
case DataType.SqlServer:
case DataType.OdbcSqlServer:
@@ -46,7 +46,7 @@ namespace FreeSql
await DbContextExecCommandAsync();
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1);
- _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
+ _db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
@@ -58,7 +58,7 @@ namespace FreeSql
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
IncrAffrows(1);
- _db.Orm.MapEntityValue(_entityType, newval, data);
+ _db.OrmOriginal.MapEntityValue(_entityType, newval, data);
Attach(newval);
if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true);
@@ -70,7 +70,7 @@ namespace FreeSql
await DbContextExecCommandAsync();
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1);
- _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
+ _db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
@@ -96,7 +96,7 @@ namespace FreeSql
if (_tableIdentitys.Length > 0)
{
//有自增,马上执行
- switch (_db.Orm.Ado.DataType)
+ switch (_db.OrmOriginal.Ado.DataType)
{
case DataType.SqlServer:
case DataType.OdbcSqlServer:
@@ -104,11 +104,11 @@ namespace FreeSql
case DataType.OdbcPostgreSQL:
await DbContextExecCommandAsync();
var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
- if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
+ if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.OrmOriginal.Ado.DataType} 的返回数据,与添加的数目不匹配");
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
var idx = 0;
foreach (var s in data)
- _db.Orm.MapEntityValue(_entityType, rets[idx++], s);
+ _db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s);
IncrAffrows(rets.Count);
AttachRange(rets);
if (_db.Options.EnableAddOrUpdateNavigateList)
@@ -168,13 +168,13 @@ namespace FreeSql
Expression.Constant(
FreeSql.Internal.Utils.GetDataReaderValue(
tref.Columns[colidx].CsType,
- _db.Orm.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName)), tref.RefColumns[colidx].CsType)
+ _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName)), tref.RefColumns[colidx].CsType)
);
if (whereParentExp == null) whereParentExp = whereExp;
else whereParentExp = Expression.AndAlso(whereParentExp, whereExp);
}
var propValEach = GetItemValue(item, prop) as IEnumerable;
- var subDelete = _db.Orm.Delete