mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 04:18:16 +08:00
#694 ✨ Exception信息 国际化 多语言
This commit is contained in:
@ -12,12 +12,12 @@ namespace FreeSql
|
||||
public abstract partial class DbContext : IDisposable
|
||||
{
|
||||
internal DbContextScopedFreeSql _ormScoped;
|
||||
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
|
||||
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql);
|
||||
|
||||
/// <summary>
|
||||
/// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction
|
||||
/// </summary>
|
||||
public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
|
||||
public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql);
|
||||
|
||||
#region Property UnitOfWork
|
||||
internal bool _isUseUnitOfWork = true; //是否创建工作单元事务
|
||||
@ -126,7 +126,7 @@ namespace FreeSql
|
||||
void CheckEntityTypeOrThrow(Type entityType)
|
||||
{
|
||||
if (OrmOriginal.CodeFirst.GetTableByEntity(entityType) == null)
|
||||
throw new ArgumentException($"参数 data 类型错误 {entityType.FullName} ");
|
||||
throw new ArgumentException(DbContextStrings.ParameterDataTypeError(entityType.FullName));
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加
|
||||
|
@ -140,11 +140,11 @@ namespace FreeSql
|
||||
/// <returns></returns>
|
||||
public DbSet<TEntity> AsType(Type entityType)
|
||||
{
|
||||
if (entityType == typeof(object)) throw new Exception("ISelect.AsType 参数不支持指定为 object");
|
||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("DbSet"));
|
||||
if (entityType == _entityType) return this;
|
||||
var newtb = _db.OrmOriginal.CodeFirst.GetTableByEntity(entityType);
|
||||
_entityType = entityType;
|
||||
_tablePriv = newtb ?? throw new Exception("DbSet.AsType 参数错误,请传入正确的实体类型");
|
||||
_tablePriv = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("DbSet"));
|
||||
_tableIdentitysPriv = null;
|
||||
_tableReturnColumnsPriv = null;
|
||||
return this;
|
||||
@ -197,11 +197,11 @@ namespace FreeSql
|
||||
public void AttachRange(IEnumerable<TEntity> data)
|
||||
{
|
||||
if (data == null || data.Any() == false) return;
|
||||
if (_table.Primarys.Any() == false) throw new Exception($"不可附加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data.First())}");
|
||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAttach_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
||||
foreach (var item in data)
|
||||
{
|
||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
|
||||
if (string.IsNullOrEmpty(key)) throw new Exception($"不可附加,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, item)}");
|
||||
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.CannotAttach_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, item)));
|
||||
|
||||
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
|
||||
{
|
||||
@ -236,9 +236,9 @@ namespace FreeSql
|
||||
public Dictionary<string, object[]> CompareState(TEntity newdata)
|
||||
{
|
||||
if (newdata == null) return null;
|
||||
if (_table.Primarys.Any() == false) throw new Exception($"不可比较,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, newdata)}");
|
||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, newdata, false);
|
||||
if (string.IsNullOrEmpty(key)) throw new Exception($"不可比较,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, newdata)}");
|
||||
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.Incomparable_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
||||
if (_states.TryGetValue(key, out var oldState) == false || oldState == null)
|
||||
return _table.ColumnsByCs.ToDictionary(a => a.Key, a => new object[]
|
||||
{
|
||||
@ -298,7 +298,7 @@ namespace FreeSql
|
||||
}
|
||||
if (_table.Primarys.Any() == false)
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可添加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
FreeSql.Internal.CommonProvider.InsertProvider<TEntity>.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
|
||||
@ -319,7 +319,7 @@ namespace FreeSql
|
||||
default:
|
||||
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
||||
return true;
|
||||
if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -327,14 +327,14 @@ namespace FreeSql
|
||||
{
|
||||
if (_states.ContainsKey(key))
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可添加,已存在于状态管理:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_AlreadyExistsInStateManagement(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
if (_db.OrmOriginal.Ado.DataType == DataType.ClickHouse) return true;
|
||||
var idval = _db.OrmOriginal.GetEntityIdentityValueWithPrimary(_entityType, data);
|
||||
if (idval > 0)
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可添加,自增属性有值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_SelfIncreasingHasValue(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -361,19 +361,19 @@ namespace FreeSql
|
||||
}
|
||||
if (_table.Primarys.Any() == false)
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可更新,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
FreeSql.Internal.CommonProvider.UpdateProvider<TEntity>.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.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
if (_states.TryGetValue(key, out var tryval) == false)
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可更新,数据未被跟踪,应该先查询 或者 Attach:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_DataShouldQueryOrAttach(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -399,13 +399,13 @@ namespace FreeSql
|
||||
}
|
||||
if (_table.Primarys.Any() == false)
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可删除,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotDelete_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
|
||||
if (string.IsNullOrEmpty(key))
|
||||
{
|
||||
if (isThrow) throw new Exception($"不可删除,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (isThrow) throw new Exception(DbContextStrings.CannotDelete_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
return false;
|
||||
}
|
||||
//if (_states.TryGetValue(key, out var tryval) == false) {
|
||||
|
@ -114,7 +114,7 @@ namespace FreeSql
|
||||
case DataType.ShenTong:
|
||||
await DbContextFlushCommandAsync(cancellationToken);
|
||||
var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken);
|
||||
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.OrmOriginal.Ado.DataType} 的返回数据,与添加的数目不匹配");
|
||||
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_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)
|
||||
@ -148,8 +148,8 @@ namespace FreeSql
|
||||
{
|
||||
if (item == null) return;
|
||||
if (string.IsNullOrEmpty(propertyName)) return;
|
||||
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException($"{_table.Type.FullName} 不存在属性 {propertyName}");
|
||||
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException($"{_table.Type.FullName} 类型已设置属性 {propertyName} 忽略特性");
|
||||
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextStrings.NotFound_Property(_table.Type.FullName, propertyName));
|
||||
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName));
|
||||
|
||||
var tref = _table.GetTableRef(propertyName, true);
|
||||
if (tref == null) return;
|
||||
@ -157,7 +157,7 @@ namespace FreeSql
|
||||
{
|
||||
case Internal.Model.TableRefType.OneToOne:
|
||||
case Internal.Model.TableRefType.ManyToOne:
|
||||
throw new ArgumentException($"{_table.Type.FullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性");
|
||||
throw new ArgumentException(DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName));
|
||||
}
|
||||
|
||||
await DbContextFlushCommandAsync(cancellationToken);
|
||||
@ -363,7 +363,7 @@ namespace FreeSql
|
||||
|
||||
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
||||
var lstval2 = default(EntityState);
|
||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception($"特别错误:更新失败,数据未被跟踪:{_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)}");
|
||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
||||
|
||||
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
||||
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
||||
@ -413,11 +413,11 @@ namespace FreeSql
|
||||
async public Task UpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var exists = ExistsInStates(data);
|
||||
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
if (exists == false)
|
||||
{
|
||||
var olddata = await OrmSelect(data).FirstAsync(cancellationToken);
|
||||
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
}
|
||||
|
||||
await UpdateRangePrivAsync(new[] { data }, true, cancellationToken);
|
||||
@ -472,7 +472,7 @@ namespace FreeSql
|
||||
async public Task AddOrUpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
|
||||
var flagExists = ExistsInStates(data);
|
||||
if (flagExists == false)
|
||||
|
@ -116,7 +116,7 @@ namespace FreeSql
|
||||
case DataType.ShenTong:
|
||||
DbContextFlushCommand();
|
||||
var rets = this.OrmInsert(data).ExecuteInserted();
|
||||
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.OrmOriginal.Ado.DataType} 的返回数据,与添加的数目不匹配");
|
||||
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_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)
|
||||
@ -159,8 +159,8 @@ namespace FreeSql
|
||||
{
|
||||
if (item == null) return;
|
||||
if (string.IsNullOrEmpty(propertyName)) return;
|
||||
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException($"{_table.Type.FullName} 不存在属性 {propertyName}");
|
||||
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException($"{_table.Type.FullName} 类型已设置属性 {propertyName} 忽略特性");
|
||||
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextStrings.NotFound_Property(_table.Type.FullName, propertyName));
|
||||
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName));
|
||||
|
||||
var tref = _table.GetTableRef(propertyName, true);
|
||||
if (tref == null) return;
|
||||
@ -168,7 +168,7 @@ namespace FreeSql
|
||||
{
|
||||
case Internal.Model.TableRefType.OneToOne:
|
||||
case Internal.Model.TableRefType.ManyToOne:
|
||||
throw new ArgumentException($"{_table.Type.FullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性");
|
||||
throw new ArgumentException(DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName));
|
||||
}
|
||||
|
||||
DbContextFlushCommand();
|
||||
@ -397,7 +397,7 @@ namespace FreeSql
|
||||
|
||||
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
||||
var lstval2 = default(EntityState);
|
||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception($"特别错误:更新失败,数据未被跟踪:{_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)}");
|
||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
||||
|
||||
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
||||
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
||||
@ -454,11 +454,11 @@ namespace FreeSql
|
||||
public void Update(TEntity data)
|
||||
{
|
||||
var exists = ExistsInStates(data);
|
||||
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
if (exists == false)
|
||||
{
|
||||
var olddata = OrmSelect(data).First();
|
||||
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
}
|
||||
|
||||
UpdateRangePriv(new[] { data }, true);
|
||||
@ -545,7 +545,7 @@ namespace FreeSql
|
||||
public void AddOrUpdate(TEntity data)
|
||||
{
|
||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data)}");
|
||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||
|
||||
var flagExists = ExistsInStates(data);
|
||||
if (flagExists == false)
|
||||
@ -585,7 +585,7 @@ namespace FreeSql
|
||||
public void BeginEdit(List<TEntity> data)
|
||||
{
|
||||
if (data == null) return;
|
||||
if (_table.Primarys.Any() == false) throw new Exception($"不可进行编辑,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data.First())}");
|
||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
||||
_statesEditing.Clear();
|
||||
_dataEditing = data;
|
||||
foreach (var item in data)
|
||||
@ -875,7 +875,7 @@ namespace FreeSql
|
||||
|
||||
var rawset = _db.Set(dbset.EntityType);
|
||||
var statesRemove = typeof(DbSet<>).MakeGenericType(dbset.EntityType).GetMethod("StatesRemoveByObjects", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(IEnumerable<object>) }, null);
|
||||
if (statesRemove == null) throw new Exception("找不到方法 DbSet<>.StatesRemoveByObjects");
|
||||
if (statesRemove == null) throw new Exception(DbContextStrings.NotFoundMethod_StatesRemoveByObjects);
|
||||
statesRemove.Invoke(rawset, new object[] { items });
|
||||
}
|
||||
returnDeleted?.AddRange(items);
|
||||
|
@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
#region HasKey
|
||||
public EfCoreTableFluent HasKey(string key)
|
||||
{
|
||||
if (key == null) throw new ArgumentException("参数错误 key 不能为 null");
|
||||
if (key == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key"));
|
||||
foreach (string name in key.Split(','))
|
||||
{
|
||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||
@ -55,7 +55,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
#region HasIndex
|
||||
public HasIndexFluent HasIndex(string index)
|
||||
{
|
||||
if (index == null) throw new ArgumentException("参数错误 index 不能为 null");
|
||||
if (index == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index"));
|
||||
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
||||
var columns = new List<string>();
|
||||
foreach (string name in index.Split(','))
|
||||
@ -98,8 +98,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
#region HasOne
|
||||
public HasOneFluent HasOne(string one)
|
||||
{
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException($"参数错误 {one} 属性不存在");
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
||||
return new HasOneFluent(_fsql, _tf, _entityType, oneProperty.PropertyType, one);
|
||||
}
|
||||
public class HasOneFluent
|
||||
@ -124,8 +124,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
}
|
||||
public HasOneFluent WithMany(string many)
|
||||
{
|
||||
if (many == null) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException($"参数错误 {many} 属性不存在");
|
||||
if (many == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(many));
|
||||
_withManyProperty = manyProperty.Name;
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(many, _selfBind));
|
||||
@ -133,18 +133,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
}
|
||||
public HasOneFluent WithOne(string one, string foreignKey)
|
||||
{
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException($"参数错误 {one} 属性不存在");
|
||||
if (oneProperty != _entityType1) throw new ArgumentException($"参数错误 {one} 属性不存在");
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
||||
if (oneProperty != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
||||
_withOneProperty = oneProperty.Name;
|
||||
|
||||
if (foreignKey == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
foreach (string name in foreignKey.Split(','))
|
||||
{
|
||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||
_withOneBind += ", " + name.Trim();
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
||||
@ -152,13 +152,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
}
|
||||
public HasOneFluent HasForeignKey(string foreignKey)
|
||||
{
|
||||
if (foreignKey == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
foreach (string name in foreignKey.Split(','))
|
||||
{
|
||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||
_selfBind += ", " + name.Trim();
|
||||
}
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||
_tf.Navigate(_selfProperty, _selfBind);
|
||||
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
||||
@ -173,9 +173,9 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
#region HasMany
|
||||
public HasManyFluent HasMany(string many)
|
||||
{
|
||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException($"参数错误 {many} 集合属性不存在");
|
||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException("参数错误 {many} 不是集合属性");
|
||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many));
|
||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many));
|
||||
return new HasManyFluent(_fsql, _tf, _entityType, manyProperty.PropertyType.GetGenericArguments()[0], manyProperty.Name);
|
||||
}
|
||||
public class HasManyFluent
|
||||
@ -200,18 +200,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
|
||||
public void WithMany(string many, Type middleType)
|
||||
{
|
||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException($"参数错误 {many} 集合属性不存在");
|
||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException("参数错误 {many} 不是集合属性");
|
||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many));
|
||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many));
|
||||
_withManyProperty = manyProperty.Name;
|
||||
_tf.Navigate(_selfProperty, null, middleType);
|
||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
||||
}
|
||||
public HasManyFluent WithOne(string one)
|
||||
{
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException($"参数错误 {one} 属性不存在");
|
||||
if (oneProperty.PropertyType != _entityType1) throw new ArgumentException($"参数错误 {one} 属性不存在");
|
||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
||||
if (oneProperty.PropertyType != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
||||
_withOneProperty = oneProperty.Name;
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(oneProperty.Name, _selfBind));
|
||||
@ -219,13 +219,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
}
|
||||
public HasManyFluent HasForeignKey(string foreignKey)
|
||||
{
|
||||
if (foreignKey == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
foreach (string name in foreignKey.Split(','))
|
||||
{
|
||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||
_selfBind += ", " + name.Trim();
|
||||
}
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||
_tf.Navigate(_selfProperty, _selfBind);
|
||||
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
||||
|
@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = key?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 key 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -63,7 +63,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = index?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 index 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index"));
|
||||
|
||||
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
||||
var columns = new List<string>();
|
||||
@ -114,7 +114,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = one?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
|
||||
var oneProperty = "";
|
||||
switch (exp.NodeType)
|
||||
@ -123,7 +123,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
oneProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException("参数错误 one");
|
||||
if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
||||
return new HasOneFluent<T2>(_fsql, _tf, oneProperty);
|
||||
}
|
||||
public class HasOneFluent<T2>
|
||||
@ -146,7 +146,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = many?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -154,7 +154,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_withManyProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException("参数错误 many");
|
||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
||||
return this;
|
||||
@ -163,7 +163,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = one?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -171,11 +171,11 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_withOneProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException("参数错误 one");
|
||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
||||
|
||||
exp = foreignKey?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -190,7 +190,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
||||
return this;
|
||||
@ -199,7 +199,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = foreignKey?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -214,7 +214,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
_tf.Navigate(_selfProperty, _selfBind);
|
||||
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
||||
@ -230,7 +230,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = many?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
|
||||
var manyProperty = "";
|
||||
switch (exp.NodeType)
|
||||
@ -239,7 +239,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
manyProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException("参数错误 many");
|
||||
if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
||||
return new HasManyFluent<T2>(_fsql, _tf, manyProperty);
|
||||
}
|
||||
public class HasManyFluent<T2>
|
||||
@ -262,7 +262,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = many?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 many 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -270,7 +270,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_withManyProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException("参数错误 many");
|
||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
||||
|
||||
_tf.Navigate(_selfProperty, null, middleType);
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
||||
@ -279,7 +279,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = one?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 one 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -287,7 +287,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_withOneProperty = (exp as MemberExpression).Member.Name;
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException("参数错误 one");
|
||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
||||
|
||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
||||
@ -297,7 +297,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
{
|
||||
var exp = foreignKey?.Body;
|
||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||
if (exp == null) throw new ArgumentException("参数错误 foreignKey 不能为 null");
|
||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||
|
||||
switch (exp.NodeType)
|
||||
{
|
||||
@ -312,7 +312,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||
break;
|
||||
}
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException("参数错误 foreignKey");
|
||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
||||
_tf.Navigate(_selfProperty, _selfBind);
|
||||
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
||||
|
@ -21,7 +21,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
throw new Exception($"AddFreeDbContext 发生错误,请检查 {dbContextType.Name} 的构造参数都已正确注入", ex);
|
||||
throw new Exception(DbContextStrings.AddFreeDbContextError_CheckConstruction(dbContextType.Name), ex);
|
||||
}
|
||||
if (ctx != null && ctx._ormScoped == null)
|
||||
{
|
||||
@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||
ctx._optionsPriv = builder._options;
|
||||
|
||||
if (ctx._ormScoped == null)
|
||||
throw new Exception("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
|
||||
throw new Exception(DbContextStrings.ConfigureUseFreeSql);
|
||||
|
||||
ctx.InitPropSets();
|
||||
}
|
||||
|
@ -54,4 +54,30 @@
|
||||
<ProjectReference Include="..\FreeSql\FreeSql.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\DbContextStrings.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>DbContextStrings.Designer.tt</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="Properties\DbContextStrings.Designer.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>DbContextStrings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<EmbeddedResource Update="Properties\DbContextStrings.en-US.resx">
|
||||
<SubType>Designer</SubType>
|
||||
<CustomToolNamespace>FreeSql</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Properties\DbContextStrings.resx">
|
||||
<CustomToolNamespace>FreeSql</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -255,6 +255,227 @@
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:FreeSql.DbContextStrings">
|
||||
<summary>
|
||||
<para>
|
||||
String resources used in FreeSql exceptions, etc.
|
||||
</para>
|
||||
<para>
|
||||
These strings are exposed publicly for use by database providers and extensions.
|
||||
It is unusual for application code to need these strings.
|
||||
</para>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.AddFreeDbContextError_CheckConstruction(System.Object)">
|
||||
<summary>
|
||||
AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_AlreadyExistsInStateManagement(System.Object)">
|
||||
<summary>
|
||||
不可添加,已存在于状态管理:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可添加,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_PrimaryKey_NotSet(System.Object)">
|
||||
<summary>
|
||||
不可添加,未设置主键的值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_SelfIncreasingHasValue(System.Object)">
|
||||
<summary>
|
||||
不可添加,自增属性有值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAttach_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可附加,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotAttach_PrimaryKey_NotSet(System.Object)">
|
||||
<summary>
|
||||
不可附加,未设置主键的值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_DataNotTracked_ShouldQuery(System.Object)">
|
||||
<summary>
|
||||
不可删除,数据未被跟踪,应该先查询:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可删除,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_PrimaryKey_NotSet(System.Object)">
|
||||
<summary>
|
||||
不可删除,未设置主键的值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可进行编辑,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_DataShouldQueryOrAttach(System.Object)">
|
||||
<summary>
|
||||
不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可更新,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_PrimaryKey_NotSet(System.Object)">
|
||||
<summary>
|
||||
不可更新,未设置主键的值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_RecordDoesNotExist(System.Object)">
|
||||
<summary>
|
||||
不可更新,数据库不存在该记录:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.ConfigureUseFreeSql">
|
||||
<summary>
|
||||
请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.DbSetAsType_NotSupport_Object">
|
||||
<summary>
|
||||
DbSet.AsType 参数错误,请传入正确的实体类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.EntityType_CannotConvert(System.Object,System.Object)">
|
||||
<summary>
|
||||
实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.EntityType_PrimaryKeyError(System.Object,System.Object)">
|
||||
<summary>
|
||||
实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.EntityType_PrimaryKeyIsNotOne(System.Object)">
|
||||
<summary>
|
||||
实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.FailedSetFilter_NotBelongIRpository">
|
||||
<summary>
|
||||
FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(System.Object)">
|
||||
<summary>
|
||||
不可比较,实体没有主键:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.Incomparable_PrimaryKey_NotSet(System.Object)">
|
||||
<summary>
|
||||
不可比较,未设置主键的值:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.InsertError_Filter(System.Object,System.Object,System.Object)">
|
||||
<summary>
|
||||
FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.ISelectAsType_ParameterError">
|
||||
<summary>
|
||||
ISelect.AsType 参数不支持指定为 object
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.NotFound_Property(System.Object,System.Object)">
|
||||
<summary>
|
||||
{tableTypeFullName} 不存在属性 {propertyName}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.NotFoundMethod_StatesRemoveByObjects">
|
||||
<summary>
|
||||
找不到方法 DbSet<>.StatesRemoveByObjects
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterDataTypeError(System.Object)">
|
||||
<summary>
|
||||
参数 data 类型错误 {entityTypeFullName}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterError(System.Object)">
|
||||
<summary>
|
||||
参数错误 {param}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterError_CannotBeNull(System.Object)">
|
||||
<summary>
|
||||
参数错误 {param} 不能为 null
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterError_IsNot_CollectionProperties(System.Object)">
|
||||
<summary>
|
||||
参数错误 {many} 不是集合属性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterError_NotFound_CollectionProperties(System.Object)">
|
||||
<summary>
|
||||
参数错误 {many} 集合属性不存在
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.ParameterError_NotFound_Property(System.Object)">
|
||||
<summary>
|
||||
参数错误 {one} 属性不存在
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.Propagation_Mandatory">
|
||||
<summary>
|
||||
Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.Propagation_Never">
|
||||
<summary>
|
||||
Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(System.Object,System.Object)">
|
||||
<summary>
|
||||
{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.SpecialError_BatchAdditionFailed(System.Object)">
|
||||
<summary>
|
||||
特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.SpecialError_UpdateFailedDataNotTracked(System.Object)">
|
||||
<summary>
|
||||
特别错误:更新失败,数据未被跟踪:{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DbContextStrings.TransactionHasBeenStarted">
|
||||
<summary>
|
||||
已开启事务,不能禁用工作单元
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.TypeHasSetProperty_IgnoreAttribute(System.Object,System.Object)">
|
||||
<summary>
|
||||
{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.UnitOfWorkManager_Construction_CannotBeNull(System.Object,System.Object)">
|
||||
<summary>
|
||||
{unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbContextStrings.UpdateError_Filter(System.Object,System.Object,System.Object)">
|
||||
<summary>
|
||||
FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.IRepositoryUnitOfWork.GetRepository``2(System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<summary>
|
||||
在工作单元内创建默认仓库类,工作单元下的仓储操作具有事务特点
|
||||
@ -559,14 +780,5 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||
<summary>
|
||||
批量注入 Repository,可以参考代码自行调整
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<param name="globalDataFilter"></param>
|
||||
<param name="assemblies"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
357
FreeSql.DbContext/Properties/DbContextStrings.Designer.cs
generated
Normal file
357
FreeSql.DbContext/Properties/DbContextStrings.Designer.cs
generated
Normal file
@ -0,0 +1,357 @@
|
||||
|
||||
// <auto-generated />
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Threading;
|
||||
|
||||
namespace FreeSql
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>
|
||||
/// String resources used in FreeSql exceptions, etc.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// These strings are exposed publicly for use by database providers and extensions.
|
||||
/// It is unusual for application code to need these strings.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public static class DbContextStrings
|
||||
{
|
||||
private static readonly ResourceManager _resourceManager
|
||||
= new ResourceManager("FreeSql.DbContext.Properties.DbContextStrings", typeof(DbContextStrings).Assembly);
|
||||
|
||||
/// <summary>
|
||||
/// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
||||
/// </summary>
|
||||
public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName)
|
||||
=> string.Format(
|
||||
GetString("AddFreeDbContextError_CheckConstruction", nameof(dbContextTypeName)),
|
||||
dbContextTypeName);
|
||||
|
||||
/// <summary>
|
||||
/// 不可添加,已存在于状态管理:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAdd_AlreadyExistsInStateManagement(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAdd_AlreadyExistsInStateManagement", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可添加,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAdd_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可添加,未设置主键的值:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAdd_PrimaryKey_NotSet(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAdd_PrimaryKey_NotSet", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可添加,自增属性有值:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAdd_SelfIncreasingHasValue(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAdd_SelfIncreasingHasValue", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可附加,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAttach_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可附加,未设置主键的值:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotAttach_PrimaryKey_NotSet(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotAttach_PrimaryKey_NotSet", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可删除,数据未被跟踪,应该先查询:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotDelete_DataNotTracked_ShouldQuery", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可删除,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotDelete_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可删除,未设置主键的值:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotDelete_PrimaryKey_NotSet(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotDelete_PrimaryKey_NotSet", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可进行编辑,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotEdit_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotUpdate_DataShouldQueryOrAttach(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotUpdate_DataShouldQueryOrAttach", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可更新,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotUpdate_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可更新,未设置主键的值:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotUpdate_PrimaryKey_NotSet(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotUpdate_PrimaryKey_NotSet", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可更新,数据库不存在该记录:{entityString}
|
||||
/// </summary>
|
||||
public static string CannotUpdate_RecordDoesNotExist(object entityString)
|
||||
=> string.Format(
|
||||
GetString("CannotUpdate_RecordDoesNotExist", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
||||
/// </summary>
|
||||
public static string ConfigureUseFreeSql
|
||||
=> GetString("ConfigureUseFreeSql");
|
||||
|
||||
/// <summary>
|
||||
/// DbSet.AsType 参数错误,请传入正确的实体类型
|
||||
/// </summary>
|
||||
public static string DbSetAsType_NotSupport_Object
|
||||
=> GetString("DbSetAsType_NotSupport_Object");
|
||||
|
||||
/// <summary>
|
||||
/// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
||||
/// </summary>
|
||||
public static string EntityType_CannotConvert(object EntityTypeName, object name)
|
||||
=> string.Format(
|
||||
GetString("EntityType_CannotConvert", nameof(EntityTypeName), nameof(name)),
|
||||
EntityTypeName, name);
|
||||
|
||||
/// <summary>
|
||||
/// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
||||
/// </summary>
|
||||
public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName)
|
||||
=> string.Format(
|
||||
GetString("EntityType_PrimaryKeyError", nameof(EntityTypeName), nameof(fullName)),
|
||||
EntityTypeName, fullName);
|
||||
|
||||
/// <summary>
|
||||
/// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
||||
/// </summary>
|
||||
public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName)
|
||||
=> string.Format(
|
||||
GetString("EntityType_PrimaryKeyIsNotOne", nameof(EntityTypeName)),
|
||||
EntityTypeName);
|
||||
|
||||
/// <summary>
|
||||
/// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
||||
/// </summary>
|
||||
public static string FailedSetFilter_NotBelongIRpository
|
||||
=> GetString("FailedSetFilter_NotBelongIRpository");
|
||||
|
||||
/// <summary>
|
||||
/// 不可比较,实体没有主键:{entityString}
|
||||
/// </summary>
|
||||
public static string Incomparable_EntityHasNo_PrimaryKey(object entityString)
|
||||
=> string.Format(
|
||||
GetString("Incomparable_EntityHasNo_PrimaryKey", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 不可比较,未设置主键的值:{entityString}
|
||||
/// </summary>
|
||||
public static string Incomparable_PrimaryKey_NotSet(object entityString)
|
||||
=> string.Format(
|
||||
GetString("Incomparable_PrimaryKey_NotSet", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
||||
/// </summary>
|
||||
public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString)
|
||||
=> string.Format(
|
||||
GetString("InsertError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)),
|
||||
filterKey, filterValueExpression, entityString);
|
||||
|
||||
/// <summary>
|
||||
/// ISelect.AsType 参数不支持指定为 object
|
||||
/// </summary>
|
||||
public static string ISelectAsType_ParameterError
|
||||
=> GetString("ISelectAsType_ParameterError");
|
||||
|
||||
/// <summary>
|
||||
/// {tableTypeFullName} 不存在属性 {propertyName}
|
||||
/// </summary>
|
||||
public static string NotFound_Property(object tableTypeFullName, object propertyName)
|
||||
=> string.Format(
|
||||
GetString("NotFound_Property", nameof(tableTypeFullName), nameof(propertyName)),
|
||||
tableTypeFullName, propertyName);
|
||||
|
||||
/// <summary>
|
||||
/// 找不到方法 DbSet<>.StatesRemoveByObjects
|
||||
/// </summary>
|
||||
public static string NotFoundMethod_StatesRemoveByObjects
|
||||
=> GetString("NotFoundMethod_StatesRemoveByObjects");
|
||||
|
||||
/// <summary>
|
||||
/// 参数 data 类型错误 {entityTypeFullName}
|
||||
/// </summary>
|
||||
public static string ParameterDataTypeError(object entityTypeFullName)
|
||||
=> string.Format(
|
||||
GetString("ParameterDataTypeError", nameof(entityTypeFullName)),
|
||||
entityTypeFullName);
|
||||
|
||||
/// <summary>
|
||||
/// 参数错误 {param}
|
||||
/// </summary>
|
||||
public static string ParameterError(object param)
|
||||
=> string.Format(
|
||||
GetString("ParameterError", nameof(param)),
|
||||
param);
|
||||
|
||||
/// <summary>
|
||||
/// 参数错误 {param} 不能为 null
|
||||
/// </summary>
|
||||
public static string ParameterError_CannotBeNull(object param)
|
||||
=> string.Format(
|
||||
GetString("ParameterError_CannotBeNull", nameof(param)),
|
||||
param);
|
||||
|
||||
/// <summary>
|
||||
/// 参数错误 {many} 不是集合属性
|
||||
/// </summary>
|
||||
public static string ParameterError_IsNot_CollectionProperties(object many)
|
||||
=> string.Format(
|
||||
GetString("ParameterError_IsNot_CollectionProperties", nameof(many)),
|
||||
many);
|
||||
|
||||
/// <summary>
|
||||
/// 参数错误 {many} 集合属性不存在
|
||||
/// </summary>
|
||||
public static string ParameterError_NotFound_CollectionProperties(object many)
|
||||
=> string.Format(
|
||||
GetString("ParameterError_NotFound_CollectionProperties", nameof(many)),
|
||||
many);
|
||||
|
||||
/// <summary>
|
||||
/// 参数错误 {one} 属性不存在
|
||||
/// </summary>
|
||||
public static string ParameterError_NotFound_Property(object one)
|
||||
=> string.Format(
|
||||
GetString("ParameterError_NotFound_Property", nameof(one)),
|
||||
one);
|
||||
|
||||
/// <summary>
|
||||
/// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
||||
/// </summary>
|
||||
public static string Propagation_Mandatory
|
||||
=> GetString("Propagation_Mandatory");
|
||||
|
||||
/// <summary>
|
||||
/// Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
||||
/// </summary>
|
||||
public static string Propagation_Never
|
||||
=> GetString("Propagation_Never");
|
||||
|
||||
/// <summary>
|
||||
/// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
||||
/// </summary>
|
||||
public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object tableTypeFullName, object propertyName)
|
||||
=> string.Format(
|
||||
GetString("PropertyOfType_IsNot_OneToManyOrManyToMany", nameof(tableTypeFullName), nameof(propertyName)),
|
||||
tableTypeFullName, propertyName);
|
||||
|
||||
/// <summary>
|
||||
/// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
||||
/// </summary>
|
||||
public static string SpecialError_BatchAdditionFailed(object dataType)
|
||||
=> string.Format(
|
||||
GetString("SpecialError_BatchAdditionFailed", nameof(dataType)),
|
||||
dataType);
|
||||
|
||||
/// <summary>
|
||||
/// 特别错误:更新失败,数据未被跟踪:{entityString}
|
||||
/// </summary>
|
||||
public static string SpecialError_UpdateFailedDataNotTracked(object entityString)
|
||||
=> string.Format(
|
||||
GetString("SpecialError_UpdateFailedDataNotTracked", nameof(entityString)),
|
||||
entityString);
|
||||
|
||||
/// <summary>
|
||||
/// 已开启事务,不能禁用工作单元
|
||||
/// </summary>
|
||||
public static string TransactionHasBeenStarted
|
||||
=> GetString("TransactionHasBeenStarted");
|
||||
|
||||
/// <summary>
|
||||
/// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
||||
/// </summary>
|
||||
public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName)
|
||||
=> string.Format(
|
||||
GetString("TypeHasSetProperty_IgnoreAttribute", nameof(tableTypeFullName), nameof(propertyName)),
|
||||
tableTypeFullName, propertyName);
|
||||
|
||||
/// <summary>
|
||||
/// {unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
||||
/// </summary>
|
||||
public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql)
|
||||
=> string.Format(
|
||||
GetString("UnitOfWorkManager_Construction_CannotBeNull", nameof(unitOfWorkManager), nameof(fsql)),
|
||||
unitOfWorkManager, fsql);
|
||||
|
||||
/// <summary>
|
||||
/// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
||||
/// </summary>
|
||||
public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString)
|
||||
=> string.Format(
|
||||
GetString("UpdateError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)),
|
||||
filterKey, filterValueExpression, entityString);
|
||||
|
||||
private static string GetString(string name, params string[] formatterNames)
|
||||
{
|
||||
var value = _resourceManager.GetString(name);
|
||||
for (var i = 0; i < formatterNames.Length; i++)
|
||||
{
|
||||
value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
<#
|
||||
Session["ResourceFile"] = "DbContextStrings.resx";
|
||||
Session["AccessModifier"] = "public";
|
||||
#>
|
||||
<#@ include file="../../FreeSql/Properties/Resources.tt" #>
|
246
FreeSql.DbContext/Properties/DbContextStrings.en-US.resx
Normal file
246
FreeSql.DbContext/Properties/DbContextStrings.en-US.resx
Normal file
@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve">
|
||||
<value>An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly</value>
|
||||
</data>
|
||||
<data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve">
|
||||
<value>Not addable, already exists in state management: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not addable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>Not addable, no value for primary key set: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve">
|
||||
<value>Not addable, self-increasing attribute has value: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not attachable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>Not attachable, no value for primary key set: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve">
|
||||
<value>Not deletable, data not tracked, should query first: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not deletable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>Not deletable, no value for primary key set: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not editable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve">
|
||||
<value>Not updatable, data not tracked, should be queried first or Attach:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not updatable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>Not updatable, no value for primary key set: {entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve">
|
||||
<value>Not updatable, the record does not exist in the database: {entityString}</value>
|
||||
</data>
|
||||
<data name="ConfigureUseFreeSql" xml:space="preserve">
|
||||
<value>Please configure UseFreeSql in OnConfiguring or AddFreeDbContext</value>
|
||||
</data>
|
||||
<data name="DbSetAsType_NotSupport_Object" xml:space="preserve">
|
||||
<value>DbSet. AsType parameter error, please pass in the correct entity type</value>
|
||||
</data>
|
||||
<data name="EntityType_CannotConvert" xml:space="preserve">
|
||||
<value>Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method</value>
|
||||
</data>
|
||||
<data name="EntityType_PrimaryKeyError" xml:space="preserve">
|
||||
<value>Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method</value>
|
||||
</data>
|
||||
<data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve">
|
||||
<value>Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method</value>
|
||||
</data>
|
||||
<data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve">
|
||||
<value>FreeSql. Repository failed to set filter because object does not belong to IRepository</value>
|
||||
</data>
|
||||
<data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>Not comparable, entity has no primary key: {entityString}</value>
|
||||
</data>
|
||||
<data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>Non-comparable, no value for primary key set: {entityString}</value>
|
||||
</data>
|
||||
<data name="InsertError_Filter" xml:space="preserve">
|
||||
<value>FreeSql. Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}</value>
|
||||
</data>
|
||||
<data name="ISelectAsType_ParameterError" xml:space="preserve">
|
||||
<value>ISelect. AsType parameter does not support specifying as object</value>
|
||||
</data>
|
||||
<data name="NotFound_Property" xml:space="preserve">
|
||||
<value>Property {propertyName} does not exist for {tableTypeFullName}</value>
|
||||
</data>
|
||||
<data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve">
|
||||
<value>Method DbSet<> not found. StatesRemoveByObjects</value>
|
||||
</data>
|
||||
<data name="ParameterDataTypeError" xml:space="preserve">
|
||||
<value>Parameter data type error {entityTypeFullName}</value>
|
||||
</data>
|
||||
<data name="ParameterError" xml:space="preserve">
|
||||
<value>Parameter error {param}</value>
|
||||
</data>
|
||||
<data name="ParameterError_CannotBeNull" xml:space="preserve">
|
||||
<value>Parameter error {param} cannot be null</value>
|
||||
</data>
|
||||
<data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve">
|
||||
<value>Parameter error {many} is not a collection property</value>
|
||||
</data>
|
||||
<data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve">
|
||||
<value>Parameter error {many} Collection property does not exist</value>
|
||||
</data>
|
||||
<data name="ParameterError_NotFound_Property" xml:space="preserve">
|
||||
<value>Parameter error {one} attribute does not exist</value>
|
||||
</data>
|
||||
<data name="Propagation_Mandatory" xml:space="preserve">
|
||||
<value>Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction</value>
|
||||
</data>
|
||||
<data name="Propagation_Never" xml:space="preserve">
|
||||
<value>Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists</value>
|
||||
</data>
|
||||
<data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve">
|
||||
<value>Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute</value>
|
||||
</data>
|
||||
<data name="SpecialError_BatchAdditionFailed" xml:space="preserve">
|
||||
<value>Special error: Bulk add failed, {dataType} returned data, does not match the number added</value>
|
||||
</data>
|
||||
<data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve">
|
||||
<value>Special error: Update failed, data not tracked: {entityString}</value>
|
||||
</data>
|
||||
<data name="TransactionHasBeenStarted" xml:space="preserve">
|
||||
<value>Transaction opened, unit of work cannot be disabled</value>
|
||||
</data>
|
||||
<data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve">
|
||||
<value>The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute</value>
|
||||
</data>
|
||||
<data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve">
|
||||
<value>The {unitOfWorkManager} constructor parameter {fsql} cannot be null</value>
|
||||
</data>
|
||||
<data name="UpdateError_Filter" xml:space="preserve">
|
||||
<value>FreeSql. Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}</value>
|
||||
</data>
|
||||
</root>
|
246
FreeSql.DbContext/Properties/DbContextStrings.resx
Normal file
246
FreeSql.DbContext/Properties/DbContextStrings.resx
Normal file
@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve">
|
||||
<value>AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入</value>
|
||||
</data>
|
||||
<data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve">
|
||||
<value>不可添加,已存在于状态管理:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可添加,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>不可添加,未设置主键的值:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve">
|
||||
<value>不可添加,自增属性有值:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可附加,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>不可附加,未设置主键的值:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve">
|
||||
<value>不可删除,数据未被跟踪,应该先查询:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可删除,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>不可删除,未设置主键的值:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可进行编辑,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve">
|
||||
<value>不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可更新,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>不可更新,未设置主键的值:{entityString}</value>
|
||||
</data>
|
||||
<data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve">
|
||||
<value>不可更新,数据库不存在该记录:{entityString}</value>
|
||||
</data>
|
||||
<data name="ConfigureUseFreeSql" xml:space="preserve">
|
||||
<value>请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql</value>
|
||||
</data>
|
||||
<data name="DbSetAsType_NotSupport_Object" xml:space="preserve">
|
||||
<value>DbSet.AsType 参数错误,请传入正确的实体类型</value>
|
||||
</data>
|
||||
<data name="EntityType_CannotConvert" xml:space="preserve">
|
||||
<value>实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法</value>
|
||||
</data>
|
||||
<data name="EntityType_PrimaryKeyError" xml:space="preserve">
|
||||
<value>实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法</value>
|
||||
</data>
|
||||
<data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve">
|
||||
<value>实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法</value>
|
||||
</data>
|
||||
<data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve">
|
||||
<value>FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository</value>
|
||||
</data>
|
||||
<data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve">
|
||||
<value>不可比较,实体没有主键:{entityString}</value>
|
||||
</data>
|
||||
<data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve">
|
||||
<value>不可比较,未设置主键的值:{entityString}</value>
|
||||
</data>
|
||||
<data name="InsertError_Filter" xml:space="preserve">
|
||||
<value>FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}</value>
|
||||
</data>
|
||||
<data name="ISelectAsType_ParameterError" xml:space="preserve">
|
||||
<value>ISelect.AsType 参数不支持指定为 object</value>
|
||||
</data>
|
||||
<data name="NotFound_Property" xml:space="preserve">
|
||||
<value>{tableTypeFullName} 不存在属性 {propertyName}</value>
|
||||
</data>
|
||||
<data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve">
|
||||
<value>找不到方法 DbSet<>.StatesRemoveByObjects</value>
|
||||
</data>
|
||||
<data name="ParameterDataTypeError" xml:space="preserve">
|
||||
<value>参数 data 类型错误 {entityTypeFullName} </value>
|
||||
</data>
|
||||
<data name="ParameterError" xml:space="preserve">
|
||||
<value>参数错误 {param}</value>
|
||||
</data>
|
||||
<data name="ParameterError_CannotBeNull" xml:space="preserve">
|
||||
<value>参数错误 {param} 不能为 null</value>
|
||||
</data>
|
||||
<data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve">
|
||||
<value>参数错误 {many} 不是集合属性</value>
|
||||
</data>
|
||||
<data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve">
|
||||
<value>参数错误 {many} 集合属性不存在</value>
|
||||
</data>
|
||||
<data name="ParameterError_NotFound_Property" xml:space="preserve">
|
||||
<value>参数错误 {one} 属性不存在</value>
|
||||
</data>
|
||||
<data name="Propagation_Mandatory" xml:space="preserve">
|
||||
<value>Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常</value>
|
||||
</data>
|
||||
<data name="Propagation_Never" xml:space="preserve">
|
||||
<value>Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常</value>
|
||||
</data>
|
||||
<data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve">
|
||||
<value>{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性</value>
|
||||
</data>
|
||||
<data name="SpecialError_BatchAdditionFailed" xml:space="preserve">
|
||||
<value>特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配</value>
|
||||
</data>
|
||||
<data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve">
|
||||
<value>特别错误:更新失败,数据未被跟踪:{entityString}</value>
|
||||
</data>
|
||||
<data name="TransactionHasBeenStarted" xml:space="preserve">
|
||||
<value>已开启事务,不能禁用工作单元</value>
|
||||
</data>
|
||||
<data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve">
|
||||
<value>{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性</value>
|
||||
</data>
|
||||
<data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve">
|
||||
<value>{unitOfWorkManager} 构造参数 {fsql} 不能为 null</value>
|
||||
</data>
|
||||
<data name="UpdateError_Filter" xml:space="preserve">
|
||||
<value>FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}</value>
|
||||
</data>
|
||||
</root>
|
@ -36,7 +36,7 @@ namespace FreeSql
|
||||
if (entitys != null)
|
||||
foreach (var entity in entitys)
|
||||
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
||||
throw new Exception($"FreeSql.Repository Update 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},更新的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}");
|
||||
throw new Exception(DbContextStrings.UpdateError_Filter(filter.Key, filter.Value.Expression, _db.OrmOriginal.GetEntityString(_entityType, entity)));
|
||||
update.Where(filter.Value.Expression);
|
||||
}
|
||||
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||
@ -64,7 +64,7 @@ namespace FreeSql
|
||||
if (entitys != null)
|
||||
foreach (var entity in entitys)
|
||||
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
||||
throw new Exception($"FreeSql.Repository Insert 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},插入的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}");
|
||||
throw new Exception(DbContextStrings.InsertError_Filter(filter.Key, filter.Value.Expression, _db.OrmOriginal.GetEntityString(_entityType, entity)));
|
||||
}
|
||||
return insert;
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ namespace FreeSql
|
||||
|
||||
var type = repos.GetType();
|
||||
Type entityType = (repos as IBaseRepository).EntityType;
|
||||
if (entityType == null) throw new Exception("FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository");
|
||||
if (entityType == null) throw new Exception(DbContextStrings.FailedSetFilter_NotBelongIRpository);
|
||||
|
||||
var notExists = _dicSetRepositoryDataFilterConvertFilterNotExists.GetOrAdd(type, t => new ConcurrentDictionary<string, bool>());
|
||||
var newFilter = new Dictionary<string, LambdaExpression>();
|
||||
|
@ -186,12 +186,12 @@ namespace FreeSql
|
||||
TEntity CheckTKeyAndReturnIdEntity(TKey id)
|
||||
{
|
||||
var tb = _db.OrmOriginal.CodeFirst.GetTableByEntity(EntityType);
|
||||
if (tb.Primarys.Length != 1) throw new Exception($"实体类型 {EntityType.Name} 主键数量不为 1,无法使用该方法");
|
||||
if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception($"实体类型 {EntityType.Name} 主键类型不为 {typeof(TKey).FullName},无法使用该方法");
|
||||
if (tb.Primarys.Length != 1) throw new Exception(DbContextStrings.EntityType_PrimaryKeyIsNotOne(EntityType.Name));
|
||||
if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception(DbContextStrings.EntityType_PrimaryKeyError(EntityType.Name, typeof(TKey).FullName));
|
||||
var obj = Activator.CreateInstance(tb.Type);
|
||||
_db.OrmOriginal.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id);
|
||||
var ret = obj as TEntity;
|
||||
if (ret == null) throw new Exception($"实体类型 {EntityType.Name} 无法转换为 {typeof(TEntity).Name},无法使用该方法");
|
||||
var ret = obj as TEntity;
|
||||
if (ret == null) throw new Exception(DbContextStrings.EntityType_CannotConvert(EntityType.Name, typeof(TEntity).Name));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ namespace FreeSql
|
||||
public void Close()
|
||||
{
|
||||
if (_tran != null)
|
||||
throw new Exception("已开启事务,不能禁用工作单元");
|
||||
throw new Exception(DbContextStrings.TransactionHasBeenStarted);
|
||||
|
||||
Enable = false;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ namespace FreeSql
|
||||
|
||||
public UnitOfWorkManager(IFreeSql fsql)
|
||||
{
|
||||
if (fsql == null) throw new ArgumentNullException($"{nameof(UnitOfWorkManager)} 构造参数 {nameof(fsql)} 不能为 null");
|
||||
if (fsql == null) throw new ArgumentNullException(DbContextStrings.UnitOfWorkManager_Construction_CannotBeNull(nameof(UnitOfWorkManager), nameof(fsql)));
|
||||
_ormScoped = DbContextScopedFreeSql.Create(fsql, null, () => this.Current);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ namespace FreeSql
|
||||
{
|
||||
case Propagation.Required: return FindedUowCreateVirtual() ?? CreateUow(isolationLevel);
|
||||
case Propagation.Supports: return FindedUowCreateVirtual() ?? CreateUowNothing(_allUows.LastOrDefault()?.IsNotSupported ?? false);
|
||||
case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception("Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常");
|
||||
case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception(DbContextStrings.Propagation_Mandatory);
|
||||
case Propagation.NotSupported: return CreateUowNothing(true);
|
||||
case Propagation.Never:
|
||||
var isNotSupported = _allUows.LastOrDefault()?.IsNotSupported ?? false;
|
||||
@ -100,7 +100,7 @@ namespace FreeSql
|
||||
{
|
||||
for (var a = _rawUows.Count - 1; a >= 0; a--)
|
||||
if (_rawUows[a].Uow.GetOrBeginTransaction(false) != null)
|
||||
throw new Exception("Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常");
|
||||
throw new Exception(DbContextStrings.Propagation_Never);
|
||||
}
|
||||
return CreateUowNothing(isNotSupported);
|
||||
case Propagation.Nested: return CreateUow(isolationLevel);
|
||||
@ -159,7 +159,7 @@ namespace FreeSql
|
||||
{
|
||||
public IBaseRepository Repository;
|
||||
public IUnitOfWork OrginalUow;
|
||||
|
||||
|
||||
public RepoInfo(IBaseRepository repository)
|
||||
{
|
||||
this.Repository = repository;
|
||||
|
Reference in New Issue
Block a user