/// <summary>
/// 表示基本EF对象上下文
/// </summary>
public partial class NopObjectContext : DbContext, IDbContext
{
#region 构造函数
public NopObjectContext(DbContextOptions<NopObjectContext> options) : base(options)
{
}
#endregion
#region 公共方法
/// <summary>
/// 进一步配置注册映射模型
/// </summary>
/// <param name="modelBuilder">用于为该上下文构造模型的构造器</param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//动态加载所有实体和查询类型配置
var typeConfigurations = Assembly.GetExecutingAssembly().GetTypes().Where(type =>
(type.BaseType?.IsGenericType ?? false)
&& (type.BaseType.GetGenericTypeDefinition() == typeof(NopEntityTypeConfiguration<>)));
foreach (var typeConfiguration in typeConfigurations)
{
var configuration = (IMappingConfiguration)Activator.CreateInstance(typeConfiguration);
configuration.ApplyConfiguration(modelBuilder);
}
base.OnModelCreating(modelBuilder);
}
/// <summary>
/// 通过添加传递的参数来修改输入SQL查询
/// </summary>
/// <param name="sql">The raw SQL query</param>
/// <param name="parameters">The values to be assigned to parameters</param>
/// <returns>Modified raw SQL query</returns>
protected virtual string CreateSqlWithParameters(string sql, params object[] parameters)
{
//add parameters to sql
for (var i = 0; i <= (parameters?.Length ?? 0) - 1; i++)
{
if (!(parameters[i] is DbParameter parameter))
continue;
sql = $"{sql}{(i > 0 ? "," : string.Empty)} @{parameter.ParameterName}";
//whether parameter is output
if (parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Output)
sql = $"{sql} output";
}
return sql;
}
#endregion
#region 方法
/// <summary>
/// 创建可用于查询和保存实体实例的DbSet
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
/// <returns>A set for the given entity type</returns>
public virtual new DbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
return base.Set<TEntity>();
}
/// <summary>
/// 生成一个