设为首页 加入收藏

TOP

IOC+EF+Core项目搭建EF封装(一)(四)
2019-10-09 20:03:18 】 浏览:226
Tags:IOC Core 项目 搭建 封装
pers can override this method in custom partial classes in order to add some custom configuration code
/// </summary> /// <param name="builder">The builder to be used to configure the entity</param> protected virtual void PostConfigure(EntityTypeBuilder<TEntity> builder) { } #endregion #region Methods /// <summary> /// Configures the entity /// </summary> /// <param name="builder">The builder to be used to configure the entity</param> public virtual void Configure(EntityTypeBuilder<TEntity> builder) { //add custom configuration this.PostConfigure(builder); } /// <summary> /// Apply this mapping configuration /// </summary> /// <param name="modelBuilder">The builder being used to construct the model for the database context</param> public virtual void ApplyConfiguration(ModelBuilder modelBuilder) { modelBuilder.ApplyConfiguration(this); } #endregion }
/// <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>
        /// 生成一个
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于部署版本遇到的---警告: 程序.. 下一篇随机数生成

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目