Ejemplo n.º 1
0
        public bool Migrate(DBContextBase dbContext, Tenant tenant, MigrationType migrationType)
        {
            var result = true;

            using (dbContext)
            {
                try
                {
                    var migrator = dbContext.GetService <IMigrator>();
                    if (migrationType == MigrationType.Down)
                    {
                        migrator.Migrate(Migration.InitialDatabase);
                    }
                    else
                    {
                        migrator.Migrate();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    result = false;
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public virtual DBContextBase GetDataContext(ISessionable session, Type dataContextType)
        {
            if (!this.dataContextBySession.ContainsKey(session.Session.Guid))
            {
                this.dataContextBySession.Add(session.Session.Guid, new Dictionary <Type, DBContextBase>());
            }
            var dataContexts = this.dataContextBySession[session.Session.Guid];

            Type mapType = GetMapDataContextType(dataContextType);

            if (mapType != null)
            {
                if (dataContexts.ContainsKey(mapType))
                {
                    return(dataContexts[mapType]);
                }

                ConstructorInfo cinfo = mapType.GetConstructor(new Type[] { typeof(IDatabase) });
                if (cinfo == null)
                {
                    throw new BusException("Typ " + mapType.Name + " nie posiada Kontruktora " + mapType.Name + "(IDatabase database, string connectionString)");
                }
                DBContextBase dbContext = (DBContextBase)cinfo.Invoke(new object[] { this });
                if (dbContext != null)
                {
                    dbContext.session = session.Session;
                    dataContexts.Add(mapType, dbContext);
                    return(dbContext);
                }
            }
            throw new BusException("Nieprawidłowo zarejestrowany DataContext (" + dataContextType.Name + ")");
        }
Ejemplo n.º 3
0
        public WBPersistence(Func <DBContextBase> contextBuilder)
        {
            this.contextBuilder = contextBuilder;
            dBContext           = contextBuilder();

            taskQueue = new ActionBlock <string>(query => dBContext.ExecuteNonQuery(query));
        }
Ejemplo n.º 4
0
 private List <T> GetLists()
 {
     using (var dbContext = new DBContextBase())
     {
         var allmodel = dbContext.GetContext <T>().Query("");
         return(allmodel);
     }
 }
Ejemplo n.º 5
0
 public void SetCtx(DBContextBase c)
 {
     // context must be assigned max 1 time
     if (!ReferenceEquals(null, _ctx))
     {
         throw new ApplicationException("Db context can be assigned just one time!");
     }
     _ctx = new WeakReference(c);
 }
Ejemplo n.º 6
0
        public Repository(DBContextBase dbContext)
        {
            if (dbContext == null)
            {
                throw new ArgumentNullException("DBContextBase in Repository");
            }

            objectSet = dbContext.Set <DomainType>();
        }
Ejemplo n.º 7
0
 public BaseRepository(DBContextBase dbProvider)
 {
     _connection = dbProvider.Connection;
     if (_connection.State == ConnectionState.Closed)
     {
         _connection.Open();
     }
     _transaction = dbProvider.Transaction;
     _context     = dbProvider;
 }
Ejemplo n.º 8
0
 private T GetOne(string key, object id)
 {
     using (var dbContext = new DBContextBase())
     {
         var models = dbContext.GetContext <T>().Query(" " + key + "=?", "", id);
         if (models.Count > 0)
         {
             return(models[0]);
         }
         return(null);
     }
 }
Ejemplo n.º 9
0
 protected virtual void Dispose(bool disposing)
 {
     if (!this.disposed)
     {
         if (disposing)
         {
             context.Dispose();
             context = null;
         }
     }
     this.disposed = true;
 }
Ejemplo n.º 10
0
        public bool GetIsReallyChanged(bool ForceDetectChanges = false)
        {
            // cache original values
            if (ReferenceEquals(_originalValues, null))
            {
                DBContextBase ctx      = null;
                bool          oldState = true; // if something goes wrong it will force TRUE, it can slow down program, but cant break anything
                try{
                    ctx = GetCtx();
                    if (ctx == null)
                    {
                        throw new ApplicationException("GetIsReallyChanged need db context!");
                    }

                    // defaultly off
                    oldState = ctx.Configuration.AutoDetectChangesEnabled;
                    ctx.Configuration.AutoDetectChangesEnabled = ForceDetectChanges;

                    System.Data.Entity.Infrastructure.DbEntityEntry <EntityBase> _Entry = ctx.Entry(this as EntityBase);
                    if (ReferenceEquals(_Entry, null) || ReferenceEquals(_Entry.OriginalValues, null))
                    {
                        throw new ApplicationException("GetIsReallyChanged can't identify entity in db contet!");
                    }
                    _originalValues = _Entry.OriginalValues;
                }finally{
                    // be sure autodetect is on
                    if (!ReferenceEquals(ctx, null))
                    {
                        ctx.Configuration.AutoDetectChangesEnabled = oldState;
                    }
                }

                if (ReferenceEquals(_originalValues, null))
                {
                    throw new ApplicationException("GetIsReallyChanged can't work without original values!");
                }
            }


            /* just use original values and manually test */
            foreach (string en in _originalValues.PropertyNames)
            {
                if (!Equals(_originalValues[en], GetPropertyValue(en)))
                {
                    return(true);
                }
            }
            // not changed
            return(false);
        }
Ejemplo n.º 11
0
 protected virtual void Dispose(bool disposing)
 {
     if (!this.disposed)
     {
         if (disposing)
         {
             ICallContext callContext = DependencyManager.Instance().Resolve <ICallContext>();
             callContext.Remove(AppKeyConst.UoW);
             context.Dispose();
             context = null;
         }
     }
     this.disposed = true;
 }
Ejemplo n.º 12
0
        public void DeleteEmployee(string employeeCode)
        {
            try
            {
                var deleteSql = string.Format("DELETE FROM [dbo].[hrm_t_employee_base] WHERE employee_code = {0}", employeeCode);

                using (var dbContext = new DBContextBase())
                {
                    dbContext.Database.ExecuteSqlCommand(deleteSql);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 13
0
        //public UnitOfWorkBase(ContextCache contextCache)
        //{
        //    this.contextCache = contextCache;
        //}

        //public UnitOfWorkBase(DbContext dbcontext)
        //{
        //    dbContext = dbcontext;
        //    ticks = DateTime.Now.Ticks;
        //}

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="contextCache"></param>
        /// <param name="dbcontext"></param>
        public UnitOfWorkBase(ContextCache contextCache, DBContextBase dbcontext)
        {
            dbContext         = dbcontext;
            this.contextCache = contextCache;
            ticks             = DateTime.Now.Ticks;
            // 记录sql
            dbContext.Database.Log = (sql) =>
            {
                if (string.IsNullOrEmpty(sql) == false)
                {
                    SqlLog.AppendLine(sql);
                    if (DebugSql)
                    {
                        Debug.WriteLine(sql);
                    }
                }
            };
        }
Ejemplo n.º 14
0
        public bool Migrate(DBContextBase dbContext, Tenant tenant, MigrationType migrationType)
        {
            var result = true;

            using (dbContext)
            {
                var migrator = dbContext.GetService <IMigrator>();
                if (migrationType == MigrationType.Down)
                {
                    migrator.Migrate(Migration.InitialDatabase);
                }
                else
                {
                    migrator.Migrate();
                }
            }

            return(result);
        }
Ejemplo n.º 15
0
        public virtual void SetCtx(DBContextBase c)
        {
            if (ReferenceEquals(null, c))
            {
                _ctx = null;
            }
            else
            {
                // context must be assigned max 1 time
                if (!ReferenceEquals(null, _ctx) && !ReferenceEquals(c, GetCtx()))
                {
                    throw new ApplicationException("Db context can be assigned just one time!");
                }
                // maby done
                if (ReferenceEquals(c, GetCtx()))
                {
                    return;
                }

                _ctx = new WeakReference(c);
            }
            // reset original values
            _originalValues = null;
        }
Ejemplo n.º 16
0
 public DomainBaseOption(DBContextBase dbContext = null, ServiceContext serviceContext = null)
 {
     DBContext      = dbContext;
     ServiceContext = serviceContext;
 }
Ejemplo n.º 17
0
 public void SetCtx(DBContextBase c)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 18
0
 public void Init(DBContextBase dbContext, ServiceContext serviceContext)
 {
     DBContext      = dbContext;
     ServiceContext = serviceContext;
 }
Ejemplo n.º 19
0
        public static void SendMessage(DBContextBase dbContext, Messager CurrentMessager)
        {
            //********************消息队列******************************

            var entries = dbContext.ChangeTracker.Entries();

            // 如果默认不发送,则启动允许列表
            if (FaSongPz == 0)
            {
                entries = entries.Where(m => DuiXingList.Contains(m.Entity.GetType().Name, StringComparer.InvariantCultureIgnoreCase));
            }
            else if (FaSongPz == 1) // 如果配置默认全部发送,则启动过滤列表
            {
                entries = entries.Where(m => !DuiXingList.Contains(m.Entity.GetType().Name.ToUpper()));
            }

            // 获取新增实体
            var addedEntries = entries.Where(m => m.State == EntityState.Added);

            foreach (DbEntityEntry entity in addedEntries)
            {
                // 创建一个Messager实体
                MessageEntity messageEntity = new MessageEntity();
                messageEntity.EntityName = entity.Entity.GetType().Name;
                messageEntity.Type       = OperationType.ADDED;
                messageEntity.Entity     = entity.Entity;

                // 反射出entity中的所有属性
                var properties = entity.Entity.GetType().GetProperties();
                foreach (var propertie in properties)
                {
                    // 获取主键
                    if (propertie.GetCustomAttributes(true).Any(m => m.GetType() == typeof(KeyAttribute)))
                    {
                        messageEntity.KeyNameList.Add(propertie.Name);
                    }
                }

                // 记录当前值
                foreach (var pName in entity.CurrentValues.PropertyNames)
                {
                    messageEntity.CurrentValues.Add(pName, entity.CurrentValues[pName]);
                }

                // 保存到当前待发送队列
                CurrentMessager.AddedEntityList.Add(messageEntity);
                CurrentMessager.EntityNameList.Add(messageEntity.EntityName);
                CurrentMessager.IsPublish = true;
            }

            // 获取删除实体
            var deletedEntries = entries.Where(m => m.State == EntityState.Deleted);

            foreach (var entity in deletedEntries)
            {
                // 创建一个Messager实体
                MessageEntity messageEntity = new MessageEntity();
                messageEntity.EntityName = entity.Entity.GetType().Name;
                messageEntity.Type       = OperationType.DELETED;
                messageEntity.Entity     = entity.Entity;

                // 反射出entity中的所有属性
                var properties = entity.Entity.GetType().GetProperties();
                foreach (var propertie in properties)
                {
                    // 获取主键
                    if (propertie.GetCustomAttributes(true).Any(m => m.GetType() == typeof(KeyAttribute)))
                    {
                        messageEntity.KeyNameList.Add(propertie.Name);
                    }
                }

                // 记录历史值
                foreach (var pName in entity.OriginalValues.PropertyNames)
                {
                    messageEntity.OriginalValues.Add(pName, entity.OriginalValues[pName]);
                }

                // 保存到当前待发送队列
                CurrentMessager.DeletedEntityList.Add(messageEntity);
                CurrentMessager.EntityNameList.Add(messageEntity.EntityName);
                CurrentMessager.IsPublish = true;
            }

            // 获取修改实体
            var modifiedEntries = entries.Where(m => m.State == EntityState.Modified);

            foreach (var entity in modifiedEntries)
            {
                // 创建一个Messager实体
                MessageEntity messageEntity = new MessageEntity();
                messageEntity.EntityName = entity.Entity.GetType().Name;
                messageEntity.Type       = OperationType.MODIFIED;
                messageEntity.Entity     = entity.Entity;

                // 反射出entity中的所有属性
                var properties = entity.Entity.GetType().GetProperties();
                foreach (var propertie in properties)
                {
                    // 获取主键
                    if (propertie.GetCustomAttributes(true).Any(m => m.GetType() == typeof(KeyAttribute)))
                    {
                        messageEntity.KeyNameList.Add(propertie.Name);
                    }
                }

                // 记录当前值
                foreach (var pName in entity.CurrentValues.PropertyNames)
                {
                    messageEntity.CurrentValues.Add(pName, entity.CurrentValues[pName]);
                }

                // 记录历史值
                foreach (var pName in entity.OriginalValues.PropertyNames)
                {
                    messageEntity.OriginalValues.Add(pName, entity.OriginalValues[pName]);
                }

                // 保存到当前待发送队列
                CurrentMessager.ModifiedEntityList.Add(messageEntity);
                CurrentMessager.EntityNameList.Add(messageEntity.EntityName);
                CurrentMessager.IsPublish = true;
            }

            //***********************消息队列***************************
        }
Ejemplo n.º 20
0
 public override void SetCtx(DBContextBase ctx)
 {
     base.SetCtx(ctx);
     _srcList      = ctx.GetPropertyByName(_RootEntityPropertyName) as System.Data.Entity.DbSet <TEntity>;
     _attachedToDb = true;
 }
Ejemplo n.º 21
0
 public BaseService(DBContextBase context)
 {
     Context   = context;
     _disposed = false;
 }
Ejemplo n.º 22
0
 public DomainBase(DBContextBase dbContext = null, ServiceContext serviceContext = null) : base(dbContext, serviceContext)
 {
 }
Ejemplo n.º 23
0
 public RepositoryFactory(DBContextBase dbContext)
 {
     this.dbContext = dbContext ?? throw new ArgumentOutOfRangeException("dbContext in RepositoryFactory");
 }
Ejemplo n.º 24
0
        /// <summary>
        /// 输出日志
        /// </summary>
        /// <param name="cmd"></param>
        private void WriteSqlLog(DBContextBase dBContextBase, DbCommand cmd)
        {
            if (dBContextBase.Database.Log == null)
            {
                return;
            }

            StringBuilder builder = new StringBuilder(256);

            builder.AppendLine(cmd.CommandText);

            for (int i = 0; i < cmd.Parameters.Count; i++)
            {
                var parameter = cmd.Parameters[i];

                builder.Append("-- ")
                .Append(parameter.ParameterName);

                if (null != parameter.Value && parameter.Value.GetType() == typeof(object[]))
                {
                    object[] values = (object[])parameter.Value;

                    builder.Append(": ");
                    foreach (var item in values)
                    {
                        builder.Append("'")
                        .Append((item == null || item == DBNull.Value) ? "null" : item)
                        .Append(",");
                    }

                    if (values.Length > 0)
                    {
                        builder.Remove(builder.Length - 1, 1);
                    }

                    builder.Append("' (Type = ")
                    .Append(parameter.DbType);
                }
                else
                {
                    builder.Append(": '")
                    .Append((parameter.Value == null || parameter.Value == DBNull.Value) ? "null" : parameter.Value)
                    .Append("' (Type = ")
                    .Append(parameter.DbType);
                }

                if (parameter.Direction != ParameterDirection.Input)
                {
                    builder.Append(", Direction = ").Append(parameter.Direction);
                }

                if (!parameter.IsNullable)
                {
                    builder.Append(", IsNullable = false");
                }

                if (parameter.Size != 0)
                {
                    builder.Append(", Size = ").Append(parameter.Size);
                }

                if (((IDbDataParameter)parameter).Precision != 0)
                {
                    builder.Append(", Precision = ").Append(((IDbDataParameter)parameter).Precision);
                }

                if (((IDbDataParameter)parameter).Scale != 0)
                {
                    builder.Append(", Scale = ").Append(((IDbDataParameter)parameter).Scale);
                }

                builder.Append(")").Append(Environment.NewLine);
            }

            dBContextBase.Database.Log(builder.ToString());
        }
Ejemplo n.º 25
0
 internal RepositoryBase(DBContextBase context)
 {
     this.dbContext = context;
     this.dbSet     = context.Set <TEntity>();
 }
Ejemplo n.º 26
0
 public UnitOfWork(DBContextBase dbContext, IRepositoryFactory repositoryFactory)
 {
     this.dbContext         = dbContext ?? throw new ArgumentNullException("dbContext in UnitOfWorkBase");
     this.repositoryFactory = repositoryFactory ?? throw new ArgumentNullException("repositoryFactory in UnitOfWorkBase");
 }