/// <summary> /// Проверяет, существует ли объект в БД /// </summary> /// <param name="dbobj"></param> /// <returns></returns> public bool IsDbObjectExists(DbObject dbobj) { Substitute(dbobj); object exists = this.m_oCommand.ExecuteScalar(); return(exists != null); }
protected override void Substitute(DbObject dbobj) { base.Substitute(dbobj); IDbDataParameter paramName = (IDbDataParameter)Command.Parameters["@Name"]; paramName.Value = dbobj.Name; }
protected override void Substitute(DbObject dbobj) { base.Substitute(dbobj); DbObjectOwned dbobjTyped = (DbObjectOwned)dbobj; IDbDataParameter paramOwner = (IDbDataParameter)Command.Parameters["@Owner"]; paramOwner.Value = dbobjTyped.Owner; }
/// <summary> /// Возвращает экземпляр IDbChecker по описанию объекта в БД. /// Если соответствующий экземпляр IDbCheck еще не создавался, /// то он создается. /// </summary> public IDbChecker this[DbObject dbobj] { get { Type key = dbobj.GetType(); IDbChecker dbchecker = this.m_oHashtable[key] as IDbChecker; if (dbchecker == null) { dbchecker = createDbChecker(dbobj); this.m_oHashtable[key] = dbchecker; } return(dbchecker); } }
protected override void Substitute(DbObject dbobj) { base.Substitute(dbobj); DbObjectTableChild dbobjTyped = (DbObjectTableChild)dbobj; IDbDataParameter paramName = (IDbDataParameter)Command.Parameters["@ParentName"]; paramName.Value = dbobjTyped.ParentTable.Name; IDbDataParameter paramOwner = (IDbDataParameter)Command.Parameters["@ParentOwner"]; paramOwner.Value = dbobjTyped.ParentTable.Owner; }
/// <summary> /// Создает класс проверки наличия объектов в БД /// </summary> /// <param name="dbobj"></param> /// <returns></returns> private IDbChecker createDbChecker(DbObject dbobj) { // ищем подходящее описание в конфиге foreach (DbCheckerDescription descr in this.m_oConfig.DbCheckerDescriptions) { if (descr.DbObjectType == dbobj.Type) { return(descr.CreateDbChecker(this.m_oConnection)); } } // если дошли до сюда, значит не нашли ничего подходящего throw new ArgumentException( "Данный тип объектов БД не поддерживается", "dbobj"); }
/// <summary> /// Создает описание дочернего объекта в БД по его XML-описанию /// и описанию родительского объекта /// </summary> /// <param name="xmlObj"></param> /// <param name="dbObj"></param> /// <returns></returns> public static DbObject Create(XmlElement xmlObj, DbObject dbObj) { string typeName = xmlObj.LocalName; switch (typeName) { case "index": return(new DbObjectIndex( xmlObj.GetAttribute("name"), xmlObj.GetAttribute("description"), (DbObjectTable)dbObj)); case "check-constraint": return(new DbObjectCheckConstraint( xmlObj.GetAttribute("name"), xmlObj.GetAttribute("description"), (DbObjectTable)dbObj)); default: throw new ArgumentException( String.Format(ERR_INVALID_OBJECT_TYPE, typeName), "xmlObj"); } }
/// <summary> /// Читает из файла описания объектов БД /// </summary> private void loadDbObjects() { ArrayList dbObjList = new ArrayList(); string xpath = String.Format("{0}dbobjects/{0}*", this.RootElementNSPrefix); XmlNodeList xmlObjects = SelectNodes(xpath); foreach (XmlElement xmlObj in xmlObjects) { DbObject dbObj = DbObjectFactory.Create(xmlObj); dbObjList.Add(dbObj); string xpathChild = String.Format("{0}*", this.RootElementNSPrefix); XmlNodeList xmlChilds = xmlObj.SelectNodes(xpathChild, this.NSManager); foreach (XmlElement xmlChild in xmlChilds) { DbObject dbChild = DbObjectFactory.Create(xmlChild, dbObj); dbObjList.Add(dbChild); } } this.m_aDbObjects = (DbObject[])dbObjList.ToArray(typeof(DbObject)); }
/// <summary> /// Подставляет в команду параметры, соответствующие описанию объекта /// </summary> /// <param name="dbobj"></param> protected virtual void Substitute(DbObject dbobj) { }