protected virtual Card _FindByCardId(int?CardRecordID, bool cast)
        {
            if (Exists(CardRecordID))
            {
                Card _obj = CreateDbEntity();
                LoadFromDb(_obj, GetQuery_SelectByCardRecordID(CardRecordID.Value));

                if (cast)
                {
                    CardType.TypeID type = CardType.GetTypeID(_obj.CardTypeID);
                    if (type == CardType.TypeID.Customer)
                    {
                        Card specialized_card = RepositoryMgr.CustomerMgr.FindById(_obj.CardRecordID);
                        return(specialized_card);
                    }
                    else if (type == CardType.TypeID.Employee)
                    {
                        Card specialized_card = RepositoryMgr.EmployeeMgr.FindById(_obj.CardRecordID);
                        return(specialized_card);
                    }
                    else if (type == CardType.TypeID.Supplier)
                    {
                        Card specialized_card = RepositoryMgr.SupplierMgr.FindById(_obj.CardRecordID);
                        return(specialized_card);
                    }
                }
                return(_obj);
            }
            else
            {
                return(null);
            }
        }
        protected override OpResult _Delete(Card _obj)
        {
            if (_obj == null)
            {
                return(OpResult.NotifyDeleteAction(OpResult.ResultStatus.ObjectIsNull, _obj, "Card object cannot be deleted as it is null"));
            }

            if (Exists(_obj))
            {
                ExecuteNonQuery(GetQuery_DeleteQuery(_obj));
                RepositoryMgr.AddressMgr.Delete(_obj.Address1);
                RepositoryMgr.AddressMgr.Delete(_obj.Address2);
                RepositoryMgr.AddressMgr.Delete(_obj.Address3);
                RepositoryMgr.AddressMgr.Delete(_obj.Address4);
                RepositoryMgr.AddressMgr.Delete(_obj.Address5);

                CardType.TypeID type = CardType.GetTypeID(_obj.CardTypeID);
                if (type == CardType.TypeID.Customer)
                {
                    RepositoryMgr.CustomerMgr.Delete((Customer)_obj);
                }
                else if (type == CardType.TypeID.Employee)
                {
                    RepositoryMgr.EmployeeMgr.Delete((Employee)_obj);
                }
                else if (type == CardType.TypeID.Supplier)
                {
                    RepositoryMgr.SupplierMgr.Delete((Supplier)_obj);
                }
                return(OpResult.NotifyDeleteAction(OpResult.ResultStatus.ExistsAndDeleted, _obj));
            }
            else
            {
                return(OpResult.NotifyDeleteAction(OpResult.ResultStatus.NotExists, _obj, "Card object cannot be deleted as it does not exist"));
            }
        }