- 修复 InsertValueSql 在仓储插入后不返回最新值;

This commit is contained in:
2881099
2022-04-24 16:11:18 +08:00
parent 1cd5539655
commit 87c71d5be3
5 changed files with 40 additions and 13 deletions

View File

@ -127,9 +127,9 @@ namespace FreeSql
protected ConcurrentDictionary<string, EntityState> _states = new ConcurrentDictionary<string, EntityState>();
TableInfo _tablePriv;
protected TableInfo _table => _tablePriv ?? (_tablePriv = _db.OrmOriginal.CodeFirst.GetTableByEntity(_entityType));
ColumnInfo[] _tableIdentitysPriv, _tableServerTimesPriv;
ColumnInfo[] _tableIdentitysPriv, _tableReturnColumnsPriv;
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());
protected ColumnInfo[] _tableReturnColumns => _tableReturnColumnsPriv ?? (_tableReturnColumnsPriv = _table.ColumnsByPosition.Where(a => a.Attribute.IsPrimary && a.Attribute.IsIdentity || string.IsNullOrWhiteSpace(a.DbInsertValue) == false).ToArray());
protected Type _entityType = typeof(TEntity);
public Type EntityType => _entityType;
@ -146,7 +146,7 @@ namespace FreeSql
_entityType = entityType;
_tablePriv = newtb ?? throw new Exception("DbSet.AsType 参数错误,请传入正确的实体类型");
_tableIdentitysPriv = null;
_tableServerTimesPriv = null;
_tableReturnColumnsPriv = null;
return this;
}

View File

@ -33,7 +33,7 @@ namespace FreeSql
async Task AddPrivAsync(TEntity data, bool isCheck, CancellationToken cancellationToken)
{
if (isCheck && CanAdd(data, true) == false) return;
if (_tableIdentitys.Length > 0)
if (_tableReturnColumns.Length > 0)
{
//有自增,马上执行
switch (_db.OrmOriginal.Ado.DataType)
@ -46,7 +46,7 @@ namespace FreeSql
case DataType.OdbcKingbaseES:
case DataType.ShenTong:
case DataType.Firebird: //firebird 只支持单条插入 returning
if (_tableIdentitys.Length == 1)
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
await DbContextFlushCommandAsync(cancellationToken);
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken);
@ -98,7 +98,7 @@ namespace FreeSql
await AddAsync(data.First(), cancellationToken);
return;
}
if (_tableIdentitys.Length > 0)
if (_tableReturnColumns.Length > 0)
{
//有自增,马上执行
switch (_db.OrmOriginal.Ado.DataType)

View File

@ -32,7 +32,7 @@ namespace FreeSql
void AddPriv(TEntity data, bool isCheck)
{
if (isCheck && CanAdd(data, true) == false) return;
if (_tableIdentitys.Length > 0)
if (_tableReturnColumns.Length > 0)
{
//有自增,马上执行
switch (_db.OrmOriginal.Ado.DataType)
@ -45,7 +45,7 @@ namespace FreeSql
case DataType.OdbcKingbaseES:
case DataType.ShenTong:
case DataType.Firebird: //firebird 只支持单条插入 returning
if (_tableIdentitys.Length == 1)
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
DbContextFlushCommand();
var idtval = this.OrmInsert(data).ExecuteIdentity();
@ -101,7 +101,7 @@ namespace FreeSql
Add(data.First());
return;
}
if (_tableIdentitys.Length > 0)
if (_tableReturnColumns.Length > 0)
{
//有自增,马上执行
switch (_db.OrmOriginal.Ado.DataType)